From cbd918b43db580bfc36af3a352a81f872617d63d Mon Sep 17 00:00:00 2001 From: Kitware Robot Date: Mon, 22 May 2017 16:47:13 -0400 Subject: [PATCH] worklet/wavelet: fix whitespace issues --- vtkm/worklet/WaveletCompressor.h | 158 ++-- .../testing/UnitTestWaveletCompressor.cxx | 82 +- vtkm/worklet/wavelets/WaveletBase.h | 44 +- vtkm/worklet/wavelets/WaveletDWT.h | 754 +++++++++--------- vtkm/worklet/wavelets/WaveletFilter.h | 12 +- vtkm/worklet/wavelets/WaveletTransforms.h | 652 +++++++-------- 6 files changed, 851 insertions(+), 851 deletions(-) diff --git a/vtkm/worklet/WaveletCompressor.h b/vtkm/worklet/WaveletCompressor.h index 08da14d9b..c717434f5 100644 --- a/vtkm/worklet/WaveletCompressor.h +++ b/vtkm/worklet/WaveletCompressor.h @@ -31,7 +31,7 @@ class WaveletCompressor : public vtkm::worklet::wavelets::WaveletDWT public: // Constructor - WaveletCompressor( wavelets::WaveletName name ) : WaveletDWT( name ) {} + WaveletCompressor( wavelets::WaveletName name ) : WaveletDWT( name ) {} // Multi-level 1D wavelet decomposition @@ -58,7 +58,7 @@ public: vtkm::Id CLength = this->ComputeCoeffLength( L, nLevels ); VTKM_ASSERT( CLength == sigInLen ); - vtkm::Id sigInPtr = 0; // pseudo pointer for the beginning of input array + vtkm::Id sigInPtr = 0; // pseudo pointer for the beginning of input array vtkm::Id len = sigInLen; vtkm::Id cALen = WaveletBase::GetApproxLength( len ); vtkm::Id cptr; // pseudo pointer for the beginning of output array @@ -71,7 +71,7 @@ public: // Define a few more types typedef vtkm::cont::ArrayHandleCounting< vtkm::Id > IdArrayType; - typedef vtkm::cont::ArrayHandlePermutation< IdArrayType, CoeffArrayType > + typedef vtkm::cont::ArrayHandlePermutation< IdArrayType, CoeffArrayType > PermutArrayType; vtkm::cont::DeviceAdapterAlgorithm< DeviceTag >::Copy( sigIn, coeffOut ); @@ -80,11 +80,11 @@ public: { tlen += L[ size_t(i) ]; cptr = 0 + CLength - tlen - cALen; - + // make input array (permutation array) IdArrayType inputIndices( sigInPtr, 1, len ); - PermutArrayType input( inputIndices, coeffOut ); - // make output array + PermutArrayType input( inputIndices, coeffOut ); + // make output array InterArrayType output; WaveletDWT::DWT1D( input, output, L1d, DeviceTag() ); @@ -123,7 +123,7 @@ public: typedef typename SignalArrayType::ValueType OutValueType; typedef vtkm::cont::ArrayHandle< OutValueType > OutArrayBasic; typedef vtkm::cont::ArrayHandleCounting< vtkm::Id > IdArrayType; - typedef vtkm::cont::ArrayHandlePermutation< IdArrayType, SignalArrayType > + typedef vtkm::cont::ArrayHandlePermutation< IdArrayType, SignalArrayType > PermutArrayType; vtkm::cont::DeviceAdapterAlgorithm< DeviceTag >::Copy( coeffIn, sigOut ); @@ -134,11 +134,11 @@ public: // Make an input array IdArrayType inputIndices( 0, 1, L1d[2] ); - PermutArrayType input( inputIndices, sigOut ); - + PermutArrayType input( inputIndices, sigOut ); + // Make an output array OutArrayBasic output; - + WaveletDWT::IDWT1D( input, L1d, output, DeviceTag() ); VTKM_ASSERT( output.GetNumberOfValues() == L1d[2] ); @@ -159,17 +159,17 @@ public: VTKM_CONT vtkm::Float64 WaveDecompose3D( InArrayType &sigIn, // Input vtkm::Id nLevels, // n levels of DWT - vtkm::Id inX, - vtkm::Id inY, + vtkm::Id inX, + vtkm::Id inY, vtkm::Id inZ, OutArrayType &coeffOut, - bool discardSigIn, // can we discard sigIn on devices? + bool discardSigIn, // can we discard sigIn on devices? DeviceTag ) { vtkm::Id sigInLen = sigIn.GetNumberOfValues(); VTKM_ASSERT( inX * inY * inZ == sigInLen ); if( nLevels < 0 || nLevels > WaveletBase::GetWaveletMaxLevel( inX ) || - nLevels > WaveletBase::GetWaveletMaxLevel( inY ) || + nLevels > WaveletBase::GetWaveletMaxLevel( inY ) || nLevels > WaveletBase::GetWaveletMaxLevel( inZ ) ) { throw vtkm::cont::ErrorBadValue("Number of levels of transform is not supported! "); @@ -189,13 +189,13 @@ public: typedef vtkm::cont::ArrayHandle OutBasicArray; // First level transform writes to the output array - vtkm::Float64 computationTime = WaveletDWT::DWT3D( - sigIn, + vtkm::Float64 computationTime = WaveletDWT::DWT3D( + sigIn, inX, inY, inZ, 0, 0, 0, currentLenX, currentLenY, currentLenZ, - coeffOut, - discardSigIn, + coeffOut, + discardSigIn, DeviceTag() ); // Successor transforms writes to a temporary array @@ -207,19 +207,19 @@ public: OutBasicArray tempOutput; - computationTime += WaveletDWT::DWT3D( - coeffOut, + computationTime += WaveletDWT::DWT3D( + coeffOut, inX, inY, inZ, 0, 0, 0, currentLenX, currentLenY, currentLenZ, - tempOutput, - false, + tempOutput, + false, DeviceTag() ); // copy results to coeffOut - WaveletBase::DeviceCubeCopyTo( tempOutput, + WaveletBase::DeviceCubeCopyTo( tempOutput, currentLenX, currentLenY, currentLenZ, - coeffOut, + coeffOut, inX, inY, inZ, 0, 0, 0, DeviceTag() ); @@ -233,7 +233,7 @@ public: // Multi-level 3D wavelet reconstruction template< typename InArrayType, typename OutArrayType, typename DeviceTag> VTKM_CONT - vtkm::Float64 WaveReconstruct3D( + vtkm::Float64 WaveReconstruct3D( InArrayType &arrIn, // Input vtkm::Id nLevels, // n levels of DWT vtkm::Id inX, vtkm::Id inY, vtkm::Id inZ, @@ -252,18 +252,18 @@ public: typedef typename OutArrayType::ValueType OutValueType; typedef vtkm::cont::ArrayHandle OutBasicArray; vtkm::Float64 computationTime = 0.0; - + OutBasicArray outBuffer; if( nLevels == 0 ) // 0 levels means no transform - { + { vtkm::cont::DeviceAdapterAlgorithm< DeviceTag >::Copy( arrIn, arrOut ); - return 0; + return 0; } else if ( discardArrIn ) { - outBuffer = arrIn; + outBuffer = arrIn; } - else + else { vtkm::cont::DeviceAdapterAlgorithm< DeviceTag >::Copy( arrIn, outBuffer ); } @@ -271,7 +271,7 @@ public: std::vector L; this->ComputeL3( inX, inY, inZ, nLevels, L ); std::vector L3d(27, 0); - + // All transforms but the last level operate on temporary arrays for( size_t i = 0; i < 24; i++ ) { @@ -286,22 +286,22 @@ public: OutBasicArray tempOutput; // IDWT - computationTime += WaveletDWT::IDWT3D( outBuffer, + computationTime += WaveletDWT::IDWT3D( outBuffer, inX, inY, inZ, 0, 0, 0, - L3d, - tempOutput, - false, + L3d, + tempOutput, + false, DeviceTag() ); // copy back reconstructed block - WaveletBase::DeviceCubeCopyTo( tempOutput, + WaveletBase::DeviceCubeCopyTo( tempOutput, L3d[24], L3d[25], L3d[26], - outBuffer, + outBuffer, inX, inY, inZ, 0, 0, 0, DeviceTag() ); - + // update L3d array L3d[0] = L3d[24]; L3d[1] = L3d[25]; @@ -315,15 +315,15 @@ public: // The last transform outputs to the final output L3d[24] = L3d[0] + L3d[12]; L3d[25] = L3d[1] + L3d[7]; - L3d[26] = L3d[2] + L3d[5]; - computationTime += WaveletDWT::IDWT3D( outBuffer, + L3d[26] = L3d[2] + L3d[5]; + computationTime += WaveletDWT::IDWT3D( outBuffer, inX, inY, inZ, 0, 0, 0, - L3d, - arrOut, - true, + L3d, + arrOut, + true, DeviceTag() ); - + return computationTime; } @@ -366,10 +366,10 @@ public: typedef vtkm::cont::ArrayHandle OutBasicArray; // First level transform operates writes to the output array - computationTime += WaveletDWT::DWT2D ( sigIn, - currentLenX, currentLenY, + computationTime += WaveletDWT::DWT2D ( sigIn, + currentLenX, currentLenY, 0, 0, - currentLenX, currentLenY, + currentLenX, currentLenY, coeffOut, L2d, DeviceTag() ); VTKM_ASSERT( coeffOut.GetNumberOfValues() == currentLenX * currentLenY ); currentLenX = WaveletBase::GetApproxLength( currentLenX ); @@ -381,10 +381,10 @@ public: OutBasicArray tempOutput; computationTime += - WaveletDWT::DWT2D ( coeffOut, - inX, inY, + WaveletDWT::DWT2D ( coeffOut, + inX, inY, 0, 0, - currentLenX, currentLenY, + currentLenX, currentLenY, tempOutput, L2d, DeviceTag() ); // copy results to coeffOut @@ -422,30 +422,30 @@ public: typedef typename OutArrayType::ValueType OutValueType; typedef vtkm::cont::ArrayHandle OutBasicArray; vtkm::Float64 computationTime = 0.0; - + OutBasicArray outBuffer; if( nLevels == 0 ) // 0 levels means no transform - { + { vtkm::cont::DeviceAdapterAlgorithm< DeviceTag >::Copy( arrIn, arrOut ); - return 0; + return 0; } else { vtkm::cont::DeviceAdapterAlgorithm< DeviceTag >::Copy( arrIn, outBuffer ); } - + VTKM_ASSERT( vtkm::Id(L.size()) == 6 * nLevels + 4 ); std::vector L2d(10, 0); - L2d[0] = L[0]; - L2d[1] = L[1]; - L2d[2] = L[2]; - L2d[3] = L[3]; - L2d[4] = L[4]; - L2d[5] = L[5]; - L2d[6] = L[6]; - L2d[7] = L[7]; - + L2d[0] = L[0]; + L2d[1] = L[1]; + L2d[2] = L[2]; + L2d[3] = L[3]; + L2d[4] = L[4]; + L2d[5] = L[5]; + L2d[6] = L[6]; + L2d[7] = L[7]; + // All transforms but the last operate on temporary arrays for( size_t i = 1; i < static_cast(nLevels); i++ ) { @@ -461,7 +461,7 @@ public: // copy back reconstructed block WaveletBase::DeviceRectangleCopyTo( tempOutput, L2d[8], L2d[9], outBuffer, inX, inY, 0, 0, DeviceTag() ); - + // update L2d array L2d[0] = L2d[8]; L2d[1] = L2d[9]; @@ -477,10 +477,10 @@ public: // The last transform outputs to the final output L2d[8] = L2d[0] + L2d[4]; L2d[9] = L2d[1] + L2d[3]; - computationTime += + computationTime += WaveletDWT::IDWT2D ( outBuffer, inX, inY, 0, 0, L2d, arrOut, DeviceTag() ); - return computationTime; + return computationTime; } @@ -501,7 +501,7 @@ public: WaveletBase::DeviceSort( sortedArray, DeviceTag() ); - vtkm::Id n = coeffLen - + vtkm::Id n = coeffLen - static_cast( static_cast(coeffLen)/ratio ); vtkm::Float64 nthVal = static_cast (sortedArray.GetPortalConstControl().Get(n)); @@ -513,7 +513,7 @@ public: ThresholdType thresholdWorklet( nthVal ); vtkm::worklet::DispatcherMapField< ThresholdType, DeviceTag > dispatcher( thresholdWorklet ); dispatcher.Invoke( coeffIn ); - } + } return 0; } @@ -569,9 +569,9 @@ public: std::cout << "Data range = " << range << std::endl; std::cout << "SNR = " << snr << std::endl; std::cout << "SNR in decibels = " << decibels << std::endl; - std::cout << "L-infy norm = " << errorMax + std::cout << "L-infy norm = " << errorMax << ", after normalization = " << errorMax / range << std::endl; - std::cout << "RMSE = " << rmse + std::cout << "RMSE = " << rmse << ", after normalization = " << rmse / range << std::endl; #undef MAKEVAL #undef VAL @@ -580,10 +580,10 @@ public: } - + // Compute the book keeping array L for 1D DWT - void ComputeL( vtkm::Id sigInLen, - vtkm::Id nLev, + void ComputeL( vtkm::Id sigInLen, + vtkm::Id nLev, std::vector &L ) { size_t nLevels = static_cast( nLev ); // cast once @@ -602,10 +602,10 @@ public: // Compute the book keeping array L for 2D DWT void ComputeL2( vtkm::Id inX, vtkm::Id inY, - vtkm::Id nLev, + vtkm::Id nLev, std::vector &L ) { - size_t nLevels = static_cast( nLev ); + size_t nLevels = static_cast( nLev ); L.resize( nLevels*6 + 4 ); L[ nLevels*6 ] = inX; L[ nLevels*6 + 1 ] = inY; @@ -661,17 +661,17 @@ public: L[ i * 21 - 18 ] = L[ i * 21 - 21 ]; L[ i * 21 - 17 ] = L[ i * 21 - 20 ]; L[ i * 21 - 16 ] = WaveletBase::GetDetailLength( L[ i * 21 + 2 ] ); - + // cLHL L[ i * 21 - 15 ] = L[ i * 21 - 21 ]; L[ i * 21 - 14 ] = WaveletBase::GetDetailLength( L[ i * 21 + 1 ] ); L[ i * 21 - 13 ] = L[ i * 21 - 19 ]; - + // cLHH L[ i * 21 - 12 ] = L[ i * 21 - 21 ]; L[ i * 21 - 11 ] = L[ i * 21 - 14 ]; L[ i * 21 - 10 ] = L[ i * 21 - 16 ]; - + // cHLL L[ i * 21 - 9 ] = WaveletBase::GetDetailLength( L[ i * 21 + 0 ] ); L[ i * 21 - 8 ] = L[ i * 21 - 20 ]; @@ -729,7 +729,7 @@ public: for( vtkm::Id i = 0; i < levN; i++ ) { cALen = WaveletBase::GetApproxLength( cALen ); - if( cALen == 0 ) + if( cALen == 0 ) { return cALen; } diff --git a/vtkm/worklet/testing/UnitTestWaveletCompressor.cxx b/vtkm/worklet/testing/UnitTestWaveletCompressor.cxx index dbce07d3a..a475e0ab6 100644 --- a/vtkm/worklet/testing/UnitTestWaveletCompressor.cxx +++ b/vtkm/worklet/testing/UnitTestWaveletCompressor.cxx @@ -46,7 +46,7 @@ public: vtkm::Float64 sx, vtkm::Float64 xy ) : dimX( dx ), dimY( dy ), amp (a), x0( x ), y0( y ), - sigmaX( sx ), sigmaY( xy ) + sigmaX( sx ), sigmaY( xy ) { sigmaX2 = 2 * sigmaX * sigmaX; sigmaY2 = 2 * sigmaY * sigmaY; @@ -58,7 +58,7 @@ public: x = idx % dimX; y = idx / dimX; } - + VTKM_EXEC vtkm::Float64 GetGaussian( vtkm::Float64 x, vtkm::Float64 y ) const { @@ -68,7 +68,7 @@ public: template VTKM_EXEC - void operator()(T& val, const vtkm::Id& workIdx) const + void operator()(T& val, const vtkm::Id& workIdx) const { vtkm::Id x, y; Sig1Dto2D( workIdx, x, y ); @@ -93,7 +93,7 @@ public: VTKM_EXEC GaussianWorklet3D( vtkm::Id dx, vtkm::Id dy, vtkm::Id dz ) : dimX( dx ), dimY( dy ), dimZ( dz ) - { + { amp = (T)20.0; sigmaX = (T)dimX / (T)4.0; sigmaX2 = sigmaX * sigmaX * (T)2.0; sigmaY = (T)dimY / (T)4.0; sigmaY2 = sigmaY * sigmaY * (T)2.0; @@ -107,7 +107,7 @@ public: y = (idx - z * dimX * dimY) / dimX; x = idx % dimX; } - + VTKM_EXEC T GetGaussian( T x, T y, T z ) const { @@ -120,7 +120,7 @@ public: } VTKM_EXEC - void operator()(T& val, const vtkm::Id& workIdx) const + void operator()(T& val, const vtkm::Id& workIdx) const { vtkm::Id x, y, z; Sig1Dto3D( workIdx, x, y, z ); @@ -142,7 +142,7 @@ template< typename ArrayType > void FillArray2D( ArrayType& array, vtkm::Id dimX, vtkm::Id dimY ) { typedef vtkm::worklet::wavelets::GaussianWorklet2D WorkletType; - WorkletType worklet( dimX, dimY, 100.0, + WorkletType worklet( dimX, dimY, 100.0, static_cast(dimX)/2.0, // center static_cast(dimY)/2.0, // center static_cast(dimX)/4.0, // spread @@ -177,14 +177,14 @@ void TestDecomposeReconstruct3D( vtkm::Float64 cratio ) // Use a WaveletCompressor vtkm::worklet::wavelets::WaveletName wname = vtkm::worklet::wavelets::BIOR4_4; - if( wname == vtkm::worklet::wavelets::BIOR1_1 ) - std::cout << "Using wavelet kernel = Bior1.1 (HAAR)" << std::endl; - else if( wname == vtkm::worklet::wavelets::BIOR2_2 ) - std::cout << "Using wavelet kernel = Bior2.2 (CDF 5/3)" << std::endl; - else if( wname == vtkm::worklet::wavelets::BIOR3_3 ) - std::cout << "Using wavelet kernel = Bior3.3 (CDF 8/4)" << std::endl; - else if( wname == vtkm::worklet::wavelets::BIOR4_4 ) - std::cout << "Using wavelet kernel = Bior4.4 (CDF 9/7)" << std::endl; + if( wname == vtkm::worklet::wavelets::BIOR1_1 ) + std::cout << "Using wavelet kernel = Bior1.1 (HAAR)" << std::endl; + else if( wname == vtkm::worklet::wavelets::BIOR2_2 ) + std::cout << "Using wavelet kernel = Bior2.2 (CDF 5/3)" << std::endl; + else if( wname == vtkm::worklet::wavelets::BIOR3_3 ) + std::cout << "Using wavelet kernel = Bior3.3 (CDF 8/4)" << std::endl; + else if( wname == vtkm::worklet::wavelets::BIOR4_4 ) + std::cout << "Using wavelet kernel = Bior4.4 (CDF 9/7)" << std::endl; vtkm::worklet::WaveletCompressor compressor( wname ); vtkm::Id XMaxLevel = compressor.GetWaveletMaxLevel( sigX ); @@ -197,31 +197,31 @@ void TestDecomposeReconstruct3D( vtkm::Float64 cratio ) // Decompose vtkm::cont::Timer<> timer; - computationTime = + computationTime = compressor.WaveDecompose3D( inputArray, nLevels, sigX, sigY, sigZ, outputArray, false, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() ); - elapsedTime1 = timer.GetElapsedTime(); + elapsedTime1 = timer.GetElapsedTime(); std::cout << "Decompose time = " << elapsedTime1 << std::endl; std::cout << " ->computation time = " << computationTime << std::endl; // Squash small coefficients timer.Reset(); compressor.SquashCoefficients( outputArray, cratio, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() ); - elapsedTime2 = timer.GetElapsedTime(); + elapsedTime2 = timer.GetElapsedTime(); std::cout << "Squash time = " << elapsedTime2 << std::endl; // Reconstruct vtkm::cont::ArrayHandle reconstructArray; timer.Reset(); - computationTime = + computationTime = compressor.WaveReconstruct3D( outputArray, nLevels, sigX, sigY, sigZ, reconstructArray, false, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() ); - elapsedTime3 = timer.GetElapsedTime(); + elapsedTime3 = timer.GetElapsedTime(); std::cout << "Reconstruction time = " << elapsedTime3 << std::endl; std::cout << " ->computation time = " << computationTime << std::endl; - std::cout << "Total time = " + std::cout << "Total time = " << (elapsedTime1 + elapsedTime2 + elapsedTime3) << std::endl; - + outputArray.ReleaseResources(); compressor.EvaluateReconstruction( inputArray, reconstructArray, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() ); @@ -233,7 +233,7 @@ void TestDecomposeReconstruct3D( vtkm::Float64 cratio ) inputArray.GetPortalConstControl().Get(i) ), "WaveletCompressor 3D failed..." ); } - elapsedTime1 = timer.GetElapsedTime(); + elapsedTime1 = timer.GetElapsedTime(); std::cout << "Verification time = " << elapsedTime1 << std::endl; } @@ -268,31 +268,31 @@ void TestDecomposeReconstruct2D( vtkm::Float64 cratio ) // Decompose vtkm::cont::Timer<> timer; - computationTime = - compressor.WaveDecompose2D( inputArray, nLevels, sigX, sigY, outputArray, L, + computationTime = + compressor.WaveDecompose2D( inputArray, nLevels, sigX, sigY, outputArray, L, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() ); - elapsedTime1 = timer.GetElapsedTime(); + elapsedTime1 = timer.GetElapsedTime(); std::cout << "Decompose time = " << elapsedTime1 << std::endl; std::cout << " ->computation time = " << computationTime << std::endl; // Squash small coefficients timer.Reset(); compressor.SquashCoefficients( outputArray, cratio, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() ); - elapsedTime2 = timer.GetElapsedTime(); + elapsedTime2 = timer.GetElapsedTime(); std::cout << "Squash time = " << elapsedTime2 << std::endl; // Reconstruct vtkm::cont::ArrayHandle reconstructArray; timer.Reset(); - computationTime = + computationTime = compressor.WaveReconstruct2D( outputArray, nLevels, sigX, sigY, reconstructArray, L, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() ); - elapsedTime3 = timer.GetElapsedTime(); + elapsedTime3 = timer.GetElapsedTime(); std::cout << "Reconstruction time = " << elapsedTime3 << std::endl; std::cout << " ->computation time = " << computationTime << std::endl; - std::cout << "Total time = " + std::cout << "Total time = " << (elapsedTime1 + elapsedTime2 + elapsedTime3) << std::endl; - + outputArray.ReleaseResources(); compressor.EvaluateReconstruction( inputArray, reconstructArray, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() ); @@ -304,7 +304,7 @@ void TestDecomposeReconstruct2D( vtkm::Float64 cratio ) inputArray.GetPortalConstControl().Get(i) ), "WaveletCompressor 2D failed..." ); } - elapsedTime1 = timer.GetElapsedTime(); + elapsedTime1 = timer.GetElapsedTime(); std::cout << "Verification time = " << elapsedTime1 << std::endl; } @@ -320,7 +320,7 @@ void TestDecomposeReconstruct1D( vtkm::Float64 cratio ) { tmpVector.push_back( 100.0 * vtkm::Sin(static_cast(i)/100.0 )); } - vtkm::cont::ArrayHandle inputArray = + vtkm::cont::ArrayHandle inputArray = vtkm::cont::make_ArrayHandle(tmpVector); vtkm::cont::ArrayHandle outputArray; @@ -341,20 +341,20 @@ void TestDecomposeReconstruct1D( vtkm::Float64 cratio ) vtkm::cont::Timer<> timer; compressor.WaveDecompose( inputArray, nLevels, outputArray, L, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() ); - vtkm::Float64 elapsedTime = timer.GetElapsedTime(); + vtkm::Float64 elapsedTime = timer.GetElapsedTime(); std::cout << "Decompose time = " << elapsedTime << std::endl; // Squash small coefficients timer.Reset(); compressor.SquashCoefficients( outputArray, cratio, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() ); - elapsedTime = timer.GetElapsedTime(); + elapsedTime = timer.GetElapsedTime(); std::cout << "Squash time = " << elapsedTime << std::endl; - + // Reconstruct vtkm::cont::ArrayHandle reconstructArray; timer.Reset(); compressor.WaveReconstruct( outputArray, nLevels, L, reconstructArray, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() ); - elapsedTime = timer.GetElapsedTime(); + elapsedTime = timer.GetElapsedTime(); std::cout << "Reconstruction time = " << elapsedTime << std::endl; compressor.EvaluateReconstruction( inputArray, reconstructArray, VTKM_DEFAULT_DEVICE_ADAPTER_TAG() ); @@ -362,19 +362,19 @@ void TestDecomposeReconstruct1D( vtkm::Float64 cratio ) timer.Reset(); for( vtkm::Id i = 0; i < reconstructArray.GetNumberOfValues(); i++ ) { - VTKM_TEST_ASSERT( test_equal( reconstructArray.GetPortalConstControl().Get(i), + VTKM_TEST_ASSERT( test_equal( reconstructArray.GetPortalConstControl().Get(i), inputArray.GetPortalConstControl().Get(i)), "WaveletCompressor 1D failed..." ); } - elapsedTime = timer.GetElapsedTime(); + elapsedTime = timer.GetElapsedTime(); std::cout << "Verification time = " << elapsedTime << std::endl; } void TestWaveletCompressor() { vtkm::Float64 cratio = 2.0; // X:1 compression, where X >= 1 - std::cout << "Compression ratio = " << cratio << ":1 "; - std::cout << "(Reconstruction using higher compression ratios may result in failure in verification)" << std::endl; + std::cout << "Compression ratio = " << cratio << ":1 "; + std::cout << "(Reconstruction using higher compression ratios may result in failure in verification)" << std::endl; TestDecomposeReconstruct1D( cratio ); std::cout << std::endl; diff --git a/vtkm/worklet/wavelets/WaveletBase.h b/vtkm/worklet/wavelets/WaveletBase.h index 13df4c04e..f8033afdd 100644 --- a/vtkm/worklet/wavelets/WaveletBase.h +++ b/vtkm/worklet/wavelets/WaveletBase.h @@ -43,7 +43,7 @@ public: WaveletBase( WaveletName name ) : wname ( name ), filter( name ) { - if( wname == CDF9_7 || wname == BIOR4_4 || + if( wname == CDF9_7 || wname == BIOR4_4 || wname == CDF5_3 || wname == BIOR2_2 ) { this->wmode = SYMW; // Default extension mode, see MatWaveBase.cpp @@ -63,7 +63,7 @@ public: { return((sigInLen+1) / 2); } - else + else { return((sigInLen) / 2); } @@ -77,7 +77,7 @@ public: { return((sigInLen-1) / 2); } - else + else { return((sigInLen) / 2); } @@ -103,7 +103,7 @@ public: // Returns maximum wavelet decompostion level vtkm::Id GetWaveletMaxLevel( vtkm::Id sigInLen ) { - vtkm::Id filterLen = this->filter.GetFilterLength(); + vtkm::Id filterLen = this->filter.GetFilterLength(); vtkm::Id level; this->WaveLengthValidate( sigInLen, filterLen, level ); return level; @@ -113,7 +113,7 @@ public: // perform a device copy. The whole 1st array to a certain start location of the 2nd array template< typename ArrayType1, typename ArrayType2, typename DeviceTag > - void DeviceCopyStartX( const ArrayType1 &srcArray, + void DeviceCopyStartX( const ArrayType1 &srcArray, ArrayType2 &dstArray, vtkm::Id startIdx, DeviceTag ) @@ -141,7 +141,7 @@ public: // Assign zeros to a certain row to a matrix template< typename ArrayType, typename DeviceTag > void DeviceAssignZero2DRow( ArrayType &array, vtkm::Id dimX, vtkm::Id dimY, // input - vtkm::Id rowIdx, DeviceTag ) + vtkm::Id rowIdx, DeviceTag ) { typedef vtkm::worklet::wavelets::AssignZero2DWorklet AssignZero2DType; AssignZero2DType zeroWorklet( dimX, dimY, -1, rowIdx ); @@ -155,7 +155,7 @@ public: // Assign zeros to a certain column to a matrix template< typename ArrayType, typename DeviceTag > void DeviceAssignZero2DColumn( ArrayType &array, vtkm::Id dimX, vtkm::Id dimY, // input - vtkm::Id colIdx, DeviceTag ) + vtkm::Id colIdx, DeviceTag ) { typedef vtkm::worklet::wavelets::AssignZero2DWorklet AssignZero2DType; AssignZero2DType zeroWorklet( dimX, dimY, colIdx, -1 ); @@ -213,14 +213,14 @@ public: // Sort by the absolute value on device struct SortLessAbsFunctor - { + { template< typename T > VTKM_EXEC - bool operator()(const T& x, const T& y) const - { - return vtkm::Abs(x) < vtkm::Abs(y); - } - }; + bool operator()(const T& x, const T& y) const + { + return vtkm::Abs(x) < vtkm::Abs(y); + } + }; template< typename ArrayType, typename DeviceTag > void DeviceSort( ArrayType &array, DeviceTag ) { @@ -229,7 +229,7 @@ public: } - + // Reduce to the sum of all values on device template< typename ArrayType, typename DeviceTag > typename ArrayType::ValueType DeviceSum( const ArrayType &array, DeviceTag ) @@ -257,7 +257,7 @@ public: return vtkm::Max(x, y); } }; - + // Device Min and Max functions @@ -301,18 +301,18 @@ public: template< typename ArrayType, typename DeviceTag > vtkm::Float64 DeviceCalculateVariance( ArrayType &array, DeviceTag ) { - vtkm::Float64 mean = static_cast(this->DeviceSum( array, DeviceTag() )) / + vtkm::Float64 mean = static_cast(this->DeviceSum( array, DeviceTag() )) / static_cast(array.GetNumberOfValues()); - + vtkm::cont::ArrayHandle< vtkm::Float64 > squaredDeviation; - + // Use a worklet typedef vtkm::worklet::wavelets::SquaredDeviation SDWorklet; SDWorklet sdw( mean ); vtkm::worklet::DispatcherMapField< SDWorklet, DeviceTag > dispatcher( sdw ); dispatcher.Invoke( array, squaredDeviation ); - vtkm::Float64 sdMean = this->DeviceSum( squaredDeviation, DeviceTag() ) / + vtkm::Float64 sdMean = this->DeviceSum( squaredDeviation, DeviceTag() ) / static_cast( squaredDeviation.GetNumberOfValues() ); return sdMean; @@ -387,8 +387,8 @@ protected: } else { - level = static_cast( vtkm::Floor( 1.0 + - vtkm::Log2( static_cast(sigInLen) / + level = static_cast( vtkm::Floor( 1.0 + + vtkm::Log2( static_cast(sigInLen) / static_cast(filterLength) ) ) ); } } @@ -401,4 +401,4 @@ protected: } // namespace worklet } // namespace vtkm -#endif +#endif diff --git a/vtkm/worklet/wavelets/WaveletDWT.h b/vtkm/worklet/wavelets/WaveletDWT.h index 73a10dbe1..b863fdd36 100644 --- a/vtkm/worklet/wavelets/WaveletDWT.h +++ b/vtkm/worklet/wavelets/WaveletDWT.h @@ -42,11 +42,11 @@ class WaveletDWT : public WaveletBase public: // Constructor - WaveletDWT( WaveletName name ) : WaveletBase( name ) {} + WaveletDWT( WaveletName name ) : WaveletBase( name ) {} // Function: extend a cube in X direction template< typename SigInArrayType, typename ExtensionArrayType, typename DeviceTag > - vtkm::Id Extend3DLeftRight( + vtkm::Id Extend3DLeftRight( const SigInArrayType &sigIn, // input vtkm::Id sigDimX, vtkm::Id sigDimY, vtkm::Id sigDimZ, vtkm::Id sigStartX, vtkm::Id sigStartY, vtkm::Id sigStartZ, @@ -55,8 +55,8 @@ public: ExtensionArrayType &ext2, // output vtkm::Id addLen, vtkm::worklet::wavelets::DWTMode ext1Method, - vtkm::worklet::wavelets::DWTMode ext2Method, - bool pretendSigPaddedZero, + vtkm::worklet::wavelets::DWTMode ext2Method, + bool pretendSigPaddedZero, bool padZeroAtExt2, DeviceTag ) { @@ -68,10 +68,10 @@ public: ext1.PrepareForOutput( 0, DeviceTag() ); // No extension on the left side if( pretendSigPaddedZero || padZeroAtExt2 ) // plane of size 1*dimY*dimZ { - ext2.PrepareForOutput( sigPretendDimY * sigPretendDimZ, DeviceTag() ); - WaveletBase::DeviceAssignZero3DPlaneX( ext2, - 1, sigPretendDimY, sigPretendDimZ, - 0, + ext2.PrepareForOutput( sigPretendDimY * sigPretendDimZ, DeviceTag() ); + WaveletBase::DeviceAssignZero3DPlaneX( ext2, + 1, sigPretendDimY, sigPretendDimZ, + 0, DeviceTag() ); } else @@ -82,25 +82,25 @@ public: } typedef typename SigInArrayType::ValueType ValueType; - typedef vtkm::cont::ArrayHandle< ValueType > ExtendArrayType; + typedef vtkm::cont::ArrayHandle< ValueType > ExtendArrayType; typedef vtkm::worklet::wavelets::ExtensionWorklet3D ExtensionWorklet; typedef typename vtkm::worklet::DispatcherMapField< ExtensionWorklet, DeviceTag > DispatcherType; vtkm::Id extDimX, extDimY, extDimZ; vtkm::worklet::wavelets::ExtensionDirection dir; - { // First work on left extension + { // First work on left extension dir = LEFT; extDimX = addLen; - extDimY = sigPretendDimY; - extDimZ = sigPretendDimZ; - + extDimY = sigPretendDimY; + extDimZ = sigPretendDimZ; + ext1.PrepareForOutput( extDimX * extDimY * extDimZ, DeviceTag() ); ExtensionWorklet worklet( extDimX, extDimY, extDimZ, sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, - sigPretendDimX, sigPretendDimY, sigPretendDimZ, ext1Method, - dir, + sigPretendDimX, sigPretendDimY, sigPretendDimZ, ext1Method, + dir, false ); // not treating input signal as having zeros DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext1, sigIn ); @@ -114,12 +114,12 @@ public: { extDimX = addLen; ext2.PrepareForOutput( extDimX * extDimY * extDimZ, DeviceTag() ); - ExtensionWorklet worklet( extDimX, extDimY, extDimZ, - sigDimX, sigDimY, sigDimZ, + ExtensionWorklet worklet( extDimX, extDimY, extDimZ, + sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - ext2Method, - dir, + ext2Method, + dir, false ); DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext2, sigIn ); @@ -127,15 +127,15 @@ public: else if( !pretendSigPaddedZero && padZeroAtExt2 ) { // This case is not exactly padding a zero at the end of Ext2. // Rather, it is to increase extension length by one and fill it - // to be whatever mirrorred. + // to be whatever mirrorred. extDimX = addLen+1; ext2.PrepareForOutput( extDimX * extDimY * extDimZ, DeviceTag() ); ExtensionWorklet worklet( extDimX, extDimY, extDimZ, - sigDimX, sigDimY, sigDimZ, + sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - ext2Method, - dir, + ext2Method, + dir, false ); DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext2, sigIn ); @@ -149,23 +149,23 @@ public: sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - ext2Method, - dir, + ext2Method, + dir, true ); // pretend sig is padded a zero DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext2Temp, sigIn ); - + // Give ext2 one layer thicker to hold the pretend zeros from signal. ext2.PrepareForOutput( (extDimX+1) * extDimY * extDimZ, DeviceTag() ); - WaveletBase::DeviceCubeCopyTo( ext2Temp, + WaveletBase::DeviceCubeCopyTo( ext2Temp, extDimX, extDimY, extDimZ, - ext2, + ext2, extDimX+1, extDimY, extDimZ, 1, 0, 0, DeviceTag() ); - WaveletBase::DeviceAssignZero3DPlaneX( ext2, + WaveletBase::DeviceAssignZero3DPlaneX( ext2, extDimX+1, extDimY, extDimZ, - 0, + 0, DeviceTag() ); } return 0; @@ -173,7 +173,7 @@ public: // Function: extend a cube in Y direction template< typename SigInArrayType, typename ExtensionArrayType, typename DeviceTag > - vtkm::Id Extend3DTopDown( + vtkm::Id Extend3DTopDown( const SigInArrayType &sigIn, // input vtkm::Id sigDimX, vtkm::Id sigDimY, vtkm::Id sigDimZ, vtkm::Id sigStartX, vtkm::Id sigStartY, vtkm::Id sigStartZ, @@ -182,8 +182,8 @@ public: ExtensionArrayType &ext2, // output vtkm::Id addLen, vtkm::worklet::wavelets::DWTMode ext1Method, - vtkm::worklet::wavelets::DWTMode ext2Method, - bool pretendSigPaddedZero, + vtkm::worklet::wavelets::DWTMode ext2Method, + bool pretendSigPaddedZero, bool padZeroAtExt2, DeviceTag ) { @@ -195,10 +195,10 @@ public: ext1.PrepareForOutput( 0, DeviceTag() ); // No extension on the top side if( pretendSigPaddedZero || padZeroAtExt2 ) // plane of size dimX*dimZ { - ext2.PrepareForOutput( sigPretendDimX * 1 * sigPretendDimZ, DeviceTag() ); - WaveletBase::DeviceAssignZero3DPlaneY( ext2, - sigPretendDimX, 1, sigPretendDimZ, - 0, + ext2.PrepareForOutput( sigPretendDimX * 1 * sigPretendDimZ, DeviceTag() ); + WaveletBase::DeviceAssignZero3DPlaneY( ext2, + sigPretendDimX, 1, sigPretendDimZ, + 0, DeviceTag() ); } else @@ -209,26 +209,26 @@ public: } typedef typename SigInArrayType::ValueType ValueType; - typedef vtkm::cont::ArrayHandle< ValueType > ExtendArrayType; + typedef vtkm::cont::ArrayHandle< ValueType > ExtendArrayType; typedef vtkm::worklet::wavelets::ExtensionWorklet3D ExtensionWorklet; typedef typename vtkm::worklet::DispatcherMapField< ExtensionWorklet, DeviceTag > DispatcherType; vtkm::Id extDimX, extDimY, extDimZ; vtkm::worklet::wavelets::ExtensionDirection dir; - { // First work on top extension + { // First work on top extension dir = TOP; - extDimX = sigPretendDimX; + extDimX = sigPretendDimX; extDimY = addLen; - extDimZ = sigPretendDimZ; - + extDimZ = sigPretendDimZ; + ext1.PrepareForOutput( extDimX * extDimY * extDimZ, DeviceTag() ); ExtensionWorklet worklet( extDimX, extDimY, extDimZ, sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - ext1Method, - dir, + ext1Method, + dir, false ); // not treating input signal as having zeros DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext1, sigIn ); @@ -242,12 +242,12 @@ public: { extDimY = addLen; ext2.PrepareForOutput( extDimX * extDimY * extDimZ, DeviceTag() ); - ExtensionWorklet worklet( extDimX, extDimY, extDimZ, - sigDimX, sigDimY, sigDimZ, + ExtensionWorklet worklet( extDimX, extDimY, extDimZ, + sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - ext2Method, - dir, + ext2Method, + dir, false ); DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext2, sigIn ); @@ -255,15 +255,15 @@ public: else if( !pretendSigPaddedZero && padZeroAtExt2 ) { // This case is not exactly padding a zero at the end of Ext2. // Rather, it is to increase extension length by one and fill it - // to be whatever mirrorred. + // to be whatever mirrorred. extDimY = addLen + 1; ext2.PrepareForOutput( extDimX * extDimY * extDimZ, DeviceTag() ); ExtensionWorklet worklet( extDimX, extDimY, extDimZ, - sigDimX, sigDimY, sigDimZ, + sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - ext2Method, - dir, + ext2Method, + dir, false ); DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext2, sigIn ); @@ -277,23 +277,23 @@ public: sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - ext2Method, - dir, + ext2Method, + dir, true ); // pretend sig is padded a zero DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext2Temp, sigIn ); - + // Give ext2 one layer thicker to hold the pretend zeros from signal. ext2.PrepareForOutput( extDimX * (extDimY+1) * extDimZ, DeviceTag() ); - WaveletBase::DeviceCubeCopyTo( ext2Temp, + WaveletBase::DeviceCubeCopyTo( ext2Temp, extDimX, extDimY, extDimZ, - ext2, + ext2, extDimX, extDimY + 1, extDimZ, 0, 1, 0, DeviceTag() ); - WaveletBase::DeviceAssignZero3DPlaneY( ext2, + WaveletBase::DeviceAssignZero3DPlaneY( ext2, extDimX, extDimY + 1, extDimZ, - 0, + 0, DeviceTag() ); } return 0; @@ -301,7 +301,7 @@ public: // Function: extend a cube in Z direction template< typename SigInArrayType, typename ExtensionArrayType, typename DeviceTag > - vtkm::Id Extend3DFrontBack( + vtkm::Id Extend3DFrontBack( const SigInArrayType &sigIn, // input vtkm::Id sigDimX, vtkm::Id sigDimY, vtkm::Id sigDimZ, vtkm::Id sigStartX, vtkm::Id sigStartY, vtkm::Id sigStartZ, @@ -310,8 +310,8 @@ public: ExtensionArrayType &ext2, // output vtkm::Id addLen, vtkm::worklet::wavelets::DWTMode ext1Method, - vtkm::worklet::wavelets::DWTMode ext2Method, - bool pretendSigPaddedZero, + vtkm::worklet::wavelets::DWTMode ext2Method, + bool pretendSigPaddedZero, bool padZeroAtExt2, DeviceTag ) { @@ -323,10 +323,10 @@ public: ext1.PrepareForOutput( 0, DeviceTag() ); // No extension on the front side if( pretendSigPaddedZero || padZeroAtExt2 ) // plane of size dimX * dimY { - ext2.PrepareForOutput( sigPretendDimX * sigPretendDimY * 1, DeviceTag() ); - WaveletBase::DeviceAssignZero3DPlaneZ( ext2, + ext2.PrepareForOutput( sigPretendDimX * sigPretendDimY * 1, DeviceTag() ); + WaveletBase::DeviceAssignZero3DPlaneZ( ext2, sigPretendDimX, sigPretendDimY, 1, - 0, + 0, DeviceTag() ); } else @@ -337,26 +337,26 @@ public: } typedef typename SigInArrayType::ValueType ValueType; - typedef vtkm::cont::ArrayHandle< ValueType > ExtendArrayType; + typedef vtkm::cont::ArrayHandle< ValueType > ExtendArrayType; typedef vtkm::worklet::wavelets::ExtensionWorklet3D ExtensionWorklet; typedef typename vtkm::worklet::DispatcherMapField< ExtensionWorklet, DeviceTag > DispatcherType; vtkm::Id extDimX, extDimY, extDimZ; vtkm::worklet::wavelets::ExtensionDirection dir; - { // First work on front extension + { // First work on front extension dir = FRONT; - extDimX = sigPretendDimX; - extDimY = sigPretendDimY; + extDimX = sigPretendDimX; + extDimY = sigPretendDimY; extDimZ = addLen; - + ext1.PrepareForOutput( extDimX * extDimY * extDimZ, DeviceTag() ); ExtensionWorklet worklet( extDimX, extDimY, extDimZ, sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - ext1Method, - dir, + ext1Method, + dir, false ); // not treating input signal as having zeros DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext1, sigIn ); @@ -370,12 +370,12 @@ public: { extDimZ = addLen; ext2.PrepareForOutput( extDimX * extDimY * extDimZ, DeviceTag() ); - ExtensionWorklet worklet( extDimX, extDimY, extDimZ, - sigDimX, sigDimY, sigDimZ, + ExtensionWorklet worklet( extDimX, extDimY, extDimZ, + sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - ext2Method, - dir, + ext2Method, + dir, false ); DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext2, sigIn ); @@ -383,15 +383,15 @@ public: else if( !pretendSigPaddedZero && padZeroAtExt2 ) { // This case is not exactly padding a zero at the end of Ext2. // Rather, it is to increase extension length by one and fill it - // to be whatever mirrorred. + // to be whatever mirrorred. extDimZ = addLen + 1; ext2.PrepareForOutput( extDimX * extDimY * extDimZ, DeviceTag() ); ExtensionWorklet worklet( extDimX, extDimY, extDimZ, - sigDimX, sigDimY, sigDimZ, + sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - ext2Method, - dir, + ext2Method, + dir, false ); DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext2, sigIn ); @@ -405,23 +405,23 @@ public: sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - ext2Method, - dir, + ext2Method, + dir, true ); // pretend sig is padded a zero DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext2Temp, sigIn ); - + // Give ext2 one layer thicker to hold the pretend zeros from signal. ext2.PrepareForOutput( extDimX * extDimY * (extDimZ+1), DeviceTag() ); - WaveletBase::DeviceCubeCopyTo( ext2Temp, + WaveletBase::DeviceCubeCopyTo( ext2Temp, extDimX, extDimY, extDimZ, - ext2, + ext2, extDimX, extDimY, extDimZ + 1, 0, 0, 1, DeviceTag() ); - WaveletBase::DeviceAssignZero3DPlaneZ( ext2, + WaveletBase::DeviceAssignZero3DPlaneZ( ext2, extDimX, extDimY, extDimZ + 1, - 0, + 0, DeviceTag() ); } return 0; @@ -429,28 +429,28 @@ public: - // L[3] L[15] - // ----------------------- - // / / /| - // L[5] / / / | - // / LLH / HLH / | - // / / / | L[16] - // ----------------------- | - // / / /| | - // L[2] / / / | /| - // / / / | / | - // /___L[0]___/___L[12]__/ | / | L[22] - // | | | |/ | - // L[1] | | | /HHH / - // | LLL | HLL | /| / - // | | | / | / L[23] - // |---------------------|/ | / - // | | | |/ - // | | | / - // L[7] | LHL | HHL | / - // | | | / L[20] - // |__________|__________|/ - // L[6] L[18] + // L[3] L[15] + // ----------------------- + // / / /| + // L[5] / / / | + // / LLH / HLH / | + // / / / | L[16] + // ----------------------- | + // / / /| | + // L[2] / / / | /| + // / / / | / | + // /___L[0]___/___L[12]__/ | / | L[22] + // | | | |/ | + // L[1] | | | /HHH / + // | LLL | HLL | /| / + // | | | / | / L[23] + // |---------------------|/ | / + // | | | |/ + // | | | / + // L[7] | LHL | HHL | / + // | | | / L[20] + // |__________|__________|/ + // L[6] L[18] // // Performs one level of 3D discrete wavelet transform on a small cube of input array // The output has the same size as the small cube @@ -461,19 +461,19 @@ public: vtkm::Id sigStartX, vtkm::Id sigStartY, vtkm::Id sigStartZ, vtkm::Id sigPretendDimX, vtkm::Id sigPretendDimY, vtkm::Id sigPretendDimZ, ArrayOutType &coeffOut, - bool discardSigIn, // discard sigIn on devices + bool discardSigIn, // discard sigIn on devices DeviceTag ) { std::vector L(27, 0); // LLL - L[0] = WaveletBase::GetApproxLength( sigPretendDimX ); - L[1] = WaveletBase::GetApproxLength( sigPretendDimY ); - L[2] = WaveletBase::GetApproxLength( sigPretendDimZ ); + L[0] = WaveletBase::GetApproxLength( sigPretendDimX ); + L[1] = WaveletBase::GetApproxLength( sigPretendDimY ); + L[2] = WaveletBase::GetApproxLength( sigPretendDimZ ); // LLH L[3] = L[0]; L[4] = L[1]; - L[5] = WaveletBase::GetDetailLength( sigPretendDimZ ); + L[5] = WaveletBase::GetDetailLength( sigPretendDimZ ); // LHL L[6] = L[0]; L[7] = WaveletBase::GetDetailLength( sigPretendDimY ); @@ -529,23 +529,23 @@ public: afterX.PrepareForOutput( sigPretendDimX * sigPretendDimY * sigPretendDimZ, DeviceTag() ); { ArrayType leftExt, rightExt; - this->Extend3DLeftRight( sigIn, + this->Extend3DLeftRight( sigIn, sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - leftExt, - rightExt, - addLen, - WaveletBase::wmode, - WaveletBase::wmode, - false, - false, - DeviceTag() ); + leftExt, + rightExt, + addLen, + WaveletBase::wmode, + WaveletBase::wmode, + false, + false, + DeviceTag() ); LeftRightXFormType worklet( WaveletBase::filter.GetLowDecomposeFilter(), WaveletBase::filter.GetHighDecomposeFilter(), - filterLen, - L[0], - oddLow, + filterLen, + L[0], + oddLow, addLen, sigPretendDimY, sigPretendDimZ, sigDimX, sigDimY, sigDimZ, sigStartX, sigStartY, sigStartZ, @@ -557,9 +557,9 @@ public: computationTime += timer.GetElapsedTime(); } - if( discardSigIn ) + if( discardSigIn ) { - sigIn.ReleaseResourcesExecution(); + sigIn.ReleaseResourcesExecution(); } // Then do transform in Y direction @@ -567,23 +567,23 @@ public: afterY.PrepareForOutput( sigPretendDimX * sigPretendDimY * sigPretendDimZ, DeviceTag() ); { ArrayType topExt, bottomExt; - this->Extend3DTopDown( afterX, + this->Extend3DTopDown( afterX, sigPretendDimX, sigPretendDimY, sigPretendDimZ, 0, 0, 0, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - topExt, - bottomExt, + topExt, + bottomExt, addLen, - WaveletBase::wmode, - WaveletBase::wmode, - false, - false, + WaveletBase::wmode, + WaveletBase::wmode, + false, + false, DeviceTag() ); TopDownXFormType worklet( WaveletBase::filter.GetLowDecomposeFilter(), WaveletBase::filter.GetHighDecomposeFilter(), - filterLen, - L[1], - oddLow, + filterLen, + L[1], + oddLow, sigPretendDimX, addLen, sigPretendDimZ, sigPretendDimX, sigPretendDimY, sigPretendDimZ, 0, 0, 0, @@ -600,23 +600,23 @@ public: { ArrayType frontExt, backExt; coeffOut.PrepareForOutput( sigPretendDimX * sigPretendDimY * sigPretendDimZ, DeviceTag() ); - this->Extend3DFrontBack( afterY, + this->Extend3DFrontBack( afterY, sigPretendDimX, sigPretendDimY, sigPretendDimZ, 0, 0, 0, sigPretendDimX, sigPretendDimY, sigPretendDimZ, - frontExt, - backExt, + frontExt, + backExt, addLen, - WaveletBase::wmode, - WaveletBase::wmode, - false, - false, + WaveletBase::wmode, + WaveletBase::wmode, + false, + false, DeviceTag() ); FrontBackXFormType worklet( WaveletBase::filter.GetLowDecomposeFilter(), WaveletBase::filter.GetHighDecomposeFilter(), - filterLen, - L[1], - oddLow, + filterLen, + L[1], + oddLow, sigPretendDimX, sigPretendDimY, addLen, sigPretendDimX, sigPretendDimY, sigPretendDimZ, 0, 0, 0, @@ -639,9 +639,9 @@ public: vtkm::Float64 IDWT3D( ArrayInType &coeffIn, vtkm::Id inDimX, vtkm::Id inDimY, vtkm::Id inDimZ, vtkm::Id inStartX, vtkm::Id inStartY, vtkm::Id inStartZ, - const std::vector &L, + const std::vector &L, ArrayOutType &sigOut, - bool discardCoeffIn, // can we discard coeffIn? + bool discardCoeffIn, // can we discard coeffIn? DeviceTag ) { //VTKM_ASSERT( L.size() == 27 ); @@ -667,20 +667,20 @@ public: afterZ.PrepareForOutput( inPretendDimX * inPretendDimY * inPretendDimZ, DeviceTag() ); { BasicArrayType ext1, ext2, ext3, ext4; - vtkm::Id extDimX = inPretendDimX; - vtkm::Id extDimY = inPretendDimY; + vtkm::Id extDimX = inPretendDimX; + vtkm::Id extDimY = inPretendDimY; vtkm::Id ext1DimZ, ext2DimZ, ext3DimZ, ext4DimZ; - this->IDWTHelper3DFrontBack( coeffIn, + this->IDWTHelper3DFrontBack( coeffIn, inDimX, inDimY, inDimZ, inStartX, inStartY, inStartZ, inPretendDimX, inPretendDimY, inPretendDimZ, - L[2], L[5], - ext1, ext2, ext3, ext4, + L[2], L[5], + ext1, ext2, ext3, ext4, ext1DimZ, ext2DimZ, ext3DimZ, ext4DimZ, - filterLen, - wmode, + filterLen, + wmode, DeviceTag() ); - FrontBackXFormType worklet( + FrontBackXFormType worklet( WaveletBase::filter.GetLowReconstructFilter(), WaveletBase::filter.GetHighReconstructFilter(), filterLen, @@ -698,11 +698,11 @@ public: computationTime += timer.GetElapsedTime(); } - if( discardCoeffIn ) + if( discardCoeffIn ) { - coeffIn.ReleaseResourcesExecution(); + coeffIn.ReleaseResourcesExecution(); } - + // Second, inverse transform in Y direction BasicArrayType afterY; afterY.PrepareForOutput( inPretendDimX * inPretendDimY * inPretendDimZ, DeviceTag() ); @@ -711,17 +711,17 @@ public: vtkm::Id extDimX = inPretendDimX; vtkm::Id extDimZ = inPretendDimZ; vtkm::Id ext1DimY, ext2DimY, ext3DimY, ext4DimY; - this->IDWTHelper3DTopDown( afterZ, + this->IDWTHelper3DTopDown( afterZ, inPretendDimX, inPretendDimY, inPretendDimZ, 0, 0, 0, inPretendDimX, inPretendDimY, inPretendDimZ, - L[1], L[7], - ext1, ext2, ext3, ext4, + L[1], L[7], + ext1, ext2, ext3, ext4, ext1DimY, ext2DimY, ext3DimY, ext4DimY, - filterLen, - wmode, - DeviceTag() ); - TopDownXFormType worklet( + filterLen, + wmode, + DeviceTag() ); + TopDownXFormType worklet( WaveletBase::filter.GetLowReconstructFilter(), WaveletBase::filter.GetHighReconstructFilter(), filterLen, @@ -737,7 +737,7 @@ public: timer.Reset(); dispatcher.Invoke( ext1, ext2, ext3, ext4, afterZ, afterY ); computationTime += timer.GetElapsedTime(); - } + } // Lastly, inverse transform in X direction afterZ.ReleaseResources(); @@ -770,9 +770,9 @@ public: inPretendDimX, inPretendDimY, inPretendDimZ, // actual signal 0, 0, 0 ); LeftRightDispatcherType dispatcher( worklet ); - timer.Reset(); + timer.Reset(); dispatcher.Invoke( ext1, ext2, ext3, ext4, afterY, sigOut ); - computationTime += timer.GetElapsedTime(); + computationTime += timer.GetElapsedTime(); } return computationTime; @@ -792,8 +792,8 @@ public: ExtensionArrayType &ext2, // right/bottom extension vtkm::Id addLen, vtkm::worklet::wavelets::DWTMode ext1Method, - vtkm::worklet::wavelets::DWTMode ext2Method, - bool pretendSigPaddedZero, + vtkm::worklet::wavelets::DWTMode ext2Method, + bool pretendSigPaddedZero, bool padZeroAtExt2, bool modeLR, // true = left-right // false = top-down @@ -826,28 +826,28 @@ public: } typedef typename SigInArrayType::ValueType ValueType; - typedef vtkm::cont::ArrayHandle< ValueType > ExtendArrayType; + typedef vtkm::cont::ArrayHandle< ValueType > ExtendArrayType; typedef vtkm::worklet::wavelets::ExtensionWorklet2D ExtensionWorklet; typedef typename vtkm::worklet::DispatcherMapField< ExtensionWorklet, DeviceTag > DispatcherType; vtkm::Id extDimX, extDimY; vtkm::worklet::wavelets::ExtensionDirection dir; - { // Work on left/top extension + { // Work on left/top extension if( modeLR ) { dir = LEFT; extDimX = addLen; - extDimY = sigPretendDimY; + extDimY = sigPretendDimY; } else { dir = TOP; extDimX = sigPretendDimX; - extDimY = addLen; + extDimY = addLen; } ext1.PrepareForOutput( extDimX * extDimY, DeviceTag() ); - ExtensionWorklet worklet( extDimX, extDimY, sigDimX, sigDimY, + ExtensionWorklet worklet( extDimX, extDimY, sigDimX, sigDimY, sigStartX, sigStartY, sigPretendDimX, sigPretendDimY, // use this area ext1Method, dir, false ); // not treating sigIn as having zeros DispatcherType dispatcher( worklet ); @@ -870,7 +870,7 @@ public: extDimY = addLen; } ext2.PrepareForOutput( extDimX * extDimY, DeviceTag() ); - ExtensionWorklet worklet( extDimX, extDimY, sigDimX, sigDimY, + ExtensionWorklet worklet( extDimX, extDimY, sigDimX, sigDimY, sigStartX, sigStartY, sigPretendDimX, sigPretendDimY, // use this area ext2Method, dir, false ); DispatcherType dispatcher( worklet ); @@ -891,16 +891,16 @@ public: extDimY = addLen+1; } ext2.PrepareForOutput( extDimX * extDimY, DeviceTag() ); - ExtensionWorklet worklet( extDimX, extDimY, sigDimX, sigDimY, + ExtensionWorklet worklet( extDimX, extDimY, sigDimX, sigDimY, sigStartX, sigStartY, sigPretendDimX, sigPretendDimY, ext2Method, dir, false ); DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext2, sigIn ); /* Pad a zero at the end of cDTemp, when cDTemp is forced to have the same length as cATemp. For example, with odd length signal, cA is 1 element - longer than cD. + longer than cD. */ - /* Update 10/24/2016: the extra element of cD shouldn't be zero, just be + /* Update 10/24/2016: the extra element of cD shouldn't be zero, just be * whatever it extends to be. * if( modeLR ) * WaveletBase::DeviceAssignZero2DColumn( ext2, extDimX, extDimY, @@ -926,12 +926,12 @@ public: extDimY = addLen; } ext2Temp.PrepareForOutput( extDimX * extDimY, DeviceTag() ); - ExtensionWorklet worklet( extDimX, extDimY, sigDimX, sigDimY, + ExtensionWorklet worklet( extDimX, extDimY, sigDimX, sigDimY, sigStartX, sigStartY, sigPretendDimX, sigPretendDimY, ext2Method, dir, true ); // pretend sig is padded a zero DispatcherType dispatcher( worklet ); dispatcher.Invoke( ext2Temp, sigIn ); - + if( modeLR ) { ext2.PrepareForOutput( (extDimX+1) * extDimY, DeviceTag() ); @@ -947,7 +947,7 @@ public: WaveletBase::DeviceRectangleCopyTo( ext2Temp, extDimX, extDimY, ext2, extDimX, extDimY+1, 0, 1, DeviceTag() ); - WaveletBase::DeviceAssignZero2DRow( ext2, extDimX, extDimY+1, + WaveletBase::DeviceAssignZero2DRow( ext2, extDimX, extDimY+1, 0, DeviceTag() ); } } @@ -962,19 +962,19 @@ public: SigExtendedArrayType &sigOut, // Output vtkm::Id addLen, vtkm::worklet::wavelets::DWTMode leftExtMethod, - vtkm::worklet::wavelets::DWTMode rightExtMethod, - bool attachZeroRightLeft, + vtkm::worklet::wavelets::DWTMode rightExtMethod, + bool attachZeroRightLeft, bool attachZeroRightRight, DeviceTag ) - { + { // "right extension" can be attached a zero on either end, but not both ends. VTKM_ASSERT( !attachZeroRightRight || !attachZeroRightLeft ); typedef typename SigInArrayType::ValueType ValueType; typedef vtkm::cont::ArrayHandle< ValueType > ExtensionArrayType; - typedef vtkm::cont::ArrayHandleConcatenate< ExtensionArrayType, SigInArrayType> + typedef vtkm::cont::ArrayHandleConcatenate< ExtensionArrayType, SigInArrayType> ArrayConcat; - + ExtensionArrayType leftExtend, rightExtend; if( addLen == 0 ) // Haar kernel @@ -990,7 +990,7 @@ public: leftExtend.PrepareForOutput( 0, DeviceTag() ); rightExtend.PrepareForOutput(0, DeviceTag() ); } - ArrayConcat leftOn( leftExtend, sigIn ); + ArrayConcat leftOn( leftExtend, sigIn ); sigOut = vtkm::cont::make_ArrayHandleConcatenate( leftOn, rightExtend ); return 0; } @@ -1051,7 +1051,7 @@ public: { rightExtend.PrepareForOutput( addLen+1, DeviceTag() ); } - else + else { rightExtend.PrepareForOutput( addLen, DeviceTag() ); } @@ -1155,7 +1155,7 @@ public: rightExtend = rightExtendPlusOne ; } - ArrayConcat leftOn( leftExtend, sigIn ); + ArrayConcat leftOn( leftExtend, sigIn ); sigOut = vtkm::cont::make_ArrayHandleConcatenate( leftOn, rightExtend ); return 0; @@ -1163,7 +1163,7 @@ public: - // Performs one level of 1D discrete wavelet transform + // Performs one level of 1D discrete wavelet transform // It takes care of boundary conditions, etc. template< typename SignalArrayType, typename CoeffArrayType, typename DeviceTag> vtkm::Float64 DWT1D( const SignalArrayType &sigIn, // Input @@ -1176,7 +1176,7 @@ public: { vtkm::cont::ErrorInternal( "Signal is too short to perform DWT!" ); return -1; - } + } //VTKM_ASSERT( L.size() == 3 ); L[0] = WaveletBase::GetApproxLength( sigInLen ); @@ -1215,9 +1215,9 @@ public: } else { - addLen = filterLen - 1; + addLen = filterLen - 1; } - + vtkm::Id sigExtendedLen = sigInLen + 2 * addLen; typedef typename SignalArrayType::ValueType SigInValueType; @@ -1230,31 +1230,31 @@ public: ConcatType2 sigInExtended; - this->Extend1D( sigIn, sigInExtended, addLen, WaveletBase::wmode, - WaveletBase::wmode, false, false, DeviceTag() ); + this->Extend1D( sigIn, sigInExtended, addLen, WaveletBase::wmode, + WaveletBase::wmode, false, false, DeviceTag() ); //VTKM_ASSERT( sigInExtended.GetNumberOfValues() == sigExtendedLen ); // initialize a worklet for forward transform - vtkm::worklet::wavelets::ForwardTransform forwardTransform + vtkm::worklet::wavelets::ForwardTransform forwardTransform ( WaveletBase::filter.GetLowDecomposeFilter(), WaveletBase::filter.GetHighDecomposeFilter(), filterLen, L[0], L[1], oddLow, oddHigh ); coeffOut.PrepareForOutput( sigExtendedLen, DeviceTag() ); - vtkm::worklet::DispatcherMapField, DeviceTag> + vtkm::worklet::DispatcherMapField, DeviceTag> dispatcher(forwardTransform); // put a timer vtkm::cont::Timer timer; - dispatcher.Invoke( sigInExtended, + dispatcher.Invoke( sigInExtended, coeffOut ); - vtkm::Float64 elapsedTime = timer.GetElapsedTime(); + vtkm::Float64 elapsedTime = timer.GetElapsedTime(); //VTKM_ASSERT( L[0] + L[1] <= coeffOut.GetNumberOfValues() ); coeffOut.Shrink( L[0] + L[1] ); - - return elapsedTime; - } - + + return elapsedTime; + } + // Performs one level of inverse wavelet transform @@ -1271,10 +1271,10 @@ public: vtkm::worklet::wavelets::DWTMode cARightMode = WaveletBase::wmode; vtkm::worklet::wavelets::DWTMode cDLeftMode = WaveletBase::wmode; vtkm::worklet::wavelets::DWTMode cDRightMode = WaveletBase::wmode; - + if( WaveletBase::filter.isSymmetric() ) // this is always true with the 1st 4 filters. { - if(( WaveletBase::wmode == SYMW && (filterLen % 2 != 0) ) || + if(( WaveletBase::wmode == SYMW && (filterLen % 2 != 0) ) || ( WaveletBase::wmode == SYMH && (filterLen % 2 == 0) ) ) { doSymConv = true; // doSymConv is always true with the 1st 4 filters. @@ -1306,7 +1306,7 @@ public: } } } - } + } vtkm::Id cATempLen, cDTempLen; //, reconTempLen; vtkm::Id addLen = 0; @@ -1316,7 +1316,7 @@ public: addLen = filterLen / 4; // addLen == 0 for Haar kernel if( (L[0] > L[1]) && (WaveletBase::wmode == SYMH) ) { - cDPadLen = L[0]; + cDPadLen = L[0]; } cATempLen = L[0] + 2 * addLen; cDTempLen = cATempLen; // same length @@ -1328,7 +1328,7 @@ public: } typedef vtkm::cont::ArrayHandleCounting< vtkm::Id > IdArrayType; - typedef vtkm::cont::ArrayHandlePermutation< IdArrayType, CoeffArrayType > + typedef vtkm::cont::ArrayHandlePermutation< IdArrayType, CoeffArrayType > PermutArrayType; // Separate cA and cD @@ -1336,7 +1336,7 @@ public: IdArrayType detailIndices( L[0], 1, L[1] ); PermutArrayType cA( approxIndices, coeffIn ); PermutArrayType cD( detailIndices, coeffIn ); - + typedef typename CoeffArrayType::ValueType CoeffValueType; typedef vtkm::cont::ArrayHandle< CoeffValueType > ExtensionArrayType; typedef vtkm::cont::ArrayHandleConcatenate< ExtensionArrayType, PermutArrayType > @@ -1352,7 +1352,7 @@ public: this->Extend1D( cA, cATemp, addLen, cALeftMode, cARightMode, false, false, DeviceTag() ); // Then extend cD based on extension needs - if( cDPadLen > 0 ) + if( cDPadLen > 0 ) { // Add back the missing final cD, 0.0, before doing extension this->Extend1D( cD, cDTemp, addLen, cDLeftMode, cDRightMode, true, false, DeviceTag() ); @@ -1361,11 +1361,11 @@ public: { vtkm::Id cDTempLenWouldBe = L[1] + 2 * addLen; if( cDTempLenWouldBe == cDTempLen ) - { + { this->Extend1D( cD, cDTemp, addLen, cDLeftMode, cDRightMode, false, false, DeviceTag()); } else if( cDTempLenWouldBe == cDTempLen - 1 ) - { + { this->Extend1D( cD, cDTemp, addLen, cDLeftMode, cDRightMode, false, true , DeviceTag()); } else @@ -1374,16 +1374,16 @@ public: return 1; } } - } - else - { + } + else + { // make cATemp ExtensionArrayType dummyArray; dummyArray.PrepareForOutput(0, DeviceTag() ); Concat1 cALeftOn( dummyArray, cA ); cATemp = vtkm::cont::make_ArrayHandleConcatenate< Concat1, ExtensionArrayType > ( cALeftOn, dummyArray ); - + // make cDTemp Concat1 cDLeftOn( dummyArray, cD ); cDTemp = vtkm::cont::make_ArrayHandleConcatenate< Concat1, ExtensionArrayType > @@ -1396,12 +1396,12 @@ public: // Allocate memory for sigOut sigOut.PrepareForOutput( cATempLen + cDTempLen, DeviceTag() ); - vtkm::Float64 elapsedTime = 0; + vtkm::Float64 elapsedTime = 0; if( filterLen % 2 != 0 ) { vtkm::worklet::wavelets::InverseTransformOdd inverseXformOdd ( WaveletBase::filter.GetLowReconstructFilter(), - WaveletBase::filter.GetHighReconstructFilter(), + WaveletBase::filter.GetHighReconstructFilter(), filterLen, L[0], cATempLen ); vtkm::worklet::DispatcherMapField, DeviceTag> dispatcher( inverseXformOdd ); @@ -1427,11 +1427,11 @@ public: sigOut.Shrink( L[2] ); return elapsedTime; - } - + } - // Performs one level of 2D discrete wavelet transform + + // Performs one level of 2D discrete wavelet transform // It takes care of boundary conditions, etc. // N.B. // L[0] == L[2] @@ -1470,7 +1470,7 @@ public: L[1] = WaveletBase::GetApproxLength( sigPretendDimY ); L[5] = L[1]; L[3] = WaveletBase::GetDetailLength( sigPretendDimY ); L[7] = L[3]; L[4] = WaveletBase::GetDetailLength( sigPretendDimX ); L[6] = L[4]; - L[8] = sigPretendDimX; + L[8] = sigPretendDimX; L[9] = sigPretendDimY; vtkm::Id filterLen = WaveletBase::filter.GetFilterLength(); @@ -1484,7 +1484,7 @@ public: typedef typename ArrayInType::ValueType ValueType; typedef vtkm::cont::ArrayHandle ArrayType; typedef vtkm::worklet::wavelets::ForwardTransform2D ForwardXForm; - typedef typename vtkm::worklet::DispatcherMapField< ForwardXForm, DeviceTag > + typedef typename vtkm::worklet::DispatcherMapField< ForwardXForm, DeviceTag > DispatcherType; vtkm::cont::Timer timer; @@ -1496,20 +1496,20 @@ public: // First transform on rows { ArrayType leftExt, rightExt; - this->Extend2D ( sigIn, - sigDimX, sigDimY, - sigStartX, sigStartY, - sigPretendDimX, sigPretendDimY, - leftExt, rightExt, addLen, - WaveletBase::wmode, WaveletBase::wmode, false, false, + this->Extend2D ( sigIn, + sigDimX, sigDimY, + sigStartX, sigStartY, + sigPretendDimX, sigPretendDimY, + leftExt, rightExt, addLen, + WaveletBase::wmode, WaveletBase::wmode, false, false, true, DeviceTag() ); // Extend in left-right direction ForwardXForm worklet( WaveletBase::filter.GetLowDecomposeFilter(), WaveletBase::filter.GetHighDecomposeFilter(), filterLen, L[0], oddLow, true, // left-right - addLen, sigPretendDimY, - sigDimX, sigDimY, - sigStartX, sigStartY, - sigPretendDimX, sigPretendDimY, + addLen, sigPretendDimY, + sigDimX, sigDimY, + sigStartX, sigStartY, + sigPretendDimX, sigPretendDimY, addLen, sigPretendDimY ); DispatcherType dispatcher(worklet); timer.Reset(); @@ -1521,20 +1521,20 @@ public: { ArrayType topExt, bottomExt; coeffOut.PrepareForOutput( sigPretendDimX * sigPretendDimY, DeviceTag() ); - this->Extend2D ( afterX, - sigPretendDimX, sigPretendDimY, - 0, 0, - sigPretendDimX, sigPretendDimY, + this->Extend2D ( afterX, + sigPretendDimX, sigPretendDimY, + 0, 0, + sigPretendDimX, sigPretendDimY, topExt, bottomExt, addLen, - WaveletBase::wmode, WaveletBase::wmode, false, false, + WaveletBase::wmode, WaveletBase::wmode, false, false, false, DeviceTag() ); // Extend in top-down direction ForwardXForm worklet( WaveletBase::filter.GetLowDecomposeFilter(), WaveletBase::filter.GetHighDecomposeFilter(), filterLen, L[1], oddLow, false, // top-down - sigPretendDimX, addLen, - sigPretendDimX, sigPretendDimY, + sigPretendDimX, addLen, + sigPretendDimX, sigPretendDimY, 0, 0, - sigPretendDimX, sigPretendDimY, + sigPretendDimX, sigPretendDimY, sigPretendDimX, addLen ); DispatcherType dispatcher( worklet ); timer.Reset(); @@ -1547,7 +1547,7 @@ public: - // Performs one level of IDWT. + // Performs one level of IDWT. // The output array has the same dimensions as the small rectangle. template< typename ArrayInType, typename ArrayOutType, typename DeviceTag > vtkm::Float64 IDWT2D ( const ArrayInType &coeffIn, @@ -1573,19 +1573,19 @@ public: BasicArrayType afterY; { BasicArrayType ext1, ext2, ext3, ext4; - vtkm::Id extDimX = inPretendDimX; + vtkm::Id extDimX = inPretendDimX; vtkm::Id ext1DimY, ext2DimY, ext3DimY, ext4DimY; - this->IDWTHelper2DTopDown( coeffIn, - inDimX, inDimY, + this->IDWTHelper2DTopDown( coeffIn, + inDimX, inDimY, inStartX, inStartY, - inPretendDimX, inPretendDimY, - L[1], L[3], - ext1, ext2, - ext3, ext4, - ext1DimY, ext2DimY, + inPretendDimX, inPretendDimY, + L[1], L[3], + ext1, ext2, + ext3, ext4, + ext1DimY, ext2DimY, ext3DimY, ext4DimY, - filterLen, - wmode, + filterLen, + wmode, DeviceTag() ); afterY.PrepareForOutput( inPretendDimX * inPretendDimY, DeviceTag() ); @@ -1606,24 +1606,24 @@ public: dispatcher.Invoke( ext1, ext2, ext3, ext4, coeffIn, afterY ); computationTime += timer.GetElapsedTime(); } - + // Then inverse transform on rows { BasicArrayType ext1, ext2, ext3, ext4; vtkm::Id extDimY = inPretendDimY; vtkm::Id ext1DimX, ext2DimX, ext3DimX, ext4DimX; - this->IDWTHelper2DLeftRight( afterY, - inPretendDimX, inPretendDimY, - 0, 0, - inPretendDimX, inPretendDimY, - L[0], L[4], - ext1, ext2, - ext3, ext4, - ext1DimX, ext2DimX, + this->IDWTHelper2DLeftRight( afterY, + inPretendDimX, inPretendDimY, + 0, 0, + inPretendDimX, inPretendDimY, + L[0], L[4], + ext1, ext2, + ext3, ext4, + ext1DimX, ext2DimX, ext3DimX, ext4DimX, - filterLen, - wmode, - DeviceTag() ); + filterLen, + wmode, + DeviceTag() ); sigOut.PrepareForOutput( inPretendDimX * inPretendDimY, DeviceTag() ); IDWT2DWorklet worklet( WaveletBase::filter.GetLowReconstructFilter(), WaveletBase::filter.GetHighReconstructFilter(), @@ -1641,7 +1641,7 @@ public: timer.Reset(); dispatcher.Invoke( ext1, ext2, ext3, ext4, afterY, sigOut ); computationTime += timer.GetElapsedTime(); - } + } return computationTime; } @@ -1651,7 +1651,7 @@ public: // decides the correct extension modes for cA and cD separately, // and fill the extensions (2D matrices) template< typename ArrayInType, typename ArrayOutType, typename DeviceTag > - void IDWTHelper2DLeftRight( + void IDWTHelper2DLeftRight( const ArrayInType &coeffIn, vtkm::Id inDimX, vtkm::Id inDimY, vtkm::Id inStartX, vtkm::Id inStartY, @@ -1661,8 +1661,8 @@ public: ArrayOutType &ext3, ArrayOutType &ext4, // output vtkm::Id &ext1DimX, vtkm::Id &ext2DimX, // output vtkm::Id &ext3DimX, vtkm::Id &ext4DimX, // output - vtkm::Id filterLen, - DWTMode mode, + vtkm::Id filterLen, + DWTMode mode, DeviceTag ) { VTKM_ASSERT( inPretendDimX = cADimX + cDDimX ); @@ -1671,31 +1671,31 @@ public: DWTMode cALeft, cARight, cDLeft, cDRight; cALeft = cARight = cDLeft = cDRight = mode; if( mode == SYMH ) - { + { cDLeft = ASYMH; - if( inPretendDimX % 2 != 0 ) - { + if( inPretendDimX % 2 != 0 ) + { cARight = SYMW; cDRight = ASYMW; - } + } else { cDRight = ASYMH; } - } + } else // mode == SYMW - { + { cDLeft = SYMH; - if( inPretendDimX % 2 != 0 ) - { + if( inPretendDimX % 2 != 0 ) + { cARight = SYMW; cDRight = SYMH; - } + } else { cARight = SYMH; } - } + } // determine length after extension vtkm::Id cAExtendedDimX, cDExtendedDimX; vtkm::Id cDPadLen = 0; @@ -1709,18 +1709,18 @@ public: // extend cA vtkm::Id cADimY = inPretendDimY; - this->Extend2D ( coeffIn, inDimX, inDimY, inStartX, inStartY, cADimX, cADimY, - ext1, ext2, addLen, cALeft, cARight, + this->Extend2D ( coeffIn, inDimX, inDimY, inStartX, inStartY, cADimX, cADimY, + ext1, ext2, addLen, cALeft, cARight, false, false, true, DeviceTag() ); - + ext1DimX = ext2DimX = addLen; // extend cD vtkm::Id cDDimY = inPretendDimY; if( cDPadLen > 0 ) { - this->Extend2D ( coeffIn, inDimX, inDimY, inStartX + cADimX, inStartY, - cDDimX, cDDimY, ext3, ext4, addLen, cDLeft, cDRight, + this->Extend2D ( coeffIn, inDimX, inDimY, inStartX + cADimX, inStartY, + cDDimX, cDDimY, ext3, ext4, addLen, cDLeft, cDRight, true, false, true, DeviceTag() ); ext3DimX = addLen; ext4DimX = addLen + 1; @@ -1730,15 +1730,15 @@ public: vtkm::Id cDExtendedWouldBe = cDDimX + 2 * addLen; if( cDExtendedWouldBe == cDExtendedDimX ) { - this->Extend2D ( coeffIn, inDimX, inDimY, inStartX + cADimX, inStartY, - cDDimX, cDDimY, ext3, ext4, addLen, cDLeft, cDRight, + this->Extend2D ( coeffIn, inDimX, inDimY, inStartX + cADimX, inStartY, + cDDimX, cDDimY, ext3, ext4, addLen, cDLeft, cDRight, false, false, true, DeviceTag()); ext3DimX = ext4DimX = addLen; } else if( cDExtendedWouldBe == cDExtendedDimX - 1 ) { - this->Extend2D ( coeffIn, inDimX, inDimY, inStartX + cADimX, inStartY, - cDDimX, cDDimY, ext3, ext4, addLen, cDLeft, cDRight, + this->Extend2D ( coeffIn, inDimX, inDimY, inStartX + cADimX, inStartY, + cDDimX, cDDimY, ext3, ext4, addLen, cDLeft, cDRight, false, true, true, DeviceTag()); ext3DimX = addLen; ext4DimX = addLen + 1; @@ -1753,7 +1753,7 @@ public: // decides the correct extension modes for cA and cD separately, // and fill the extensions (2D matrices) template< typename ArrayInType, typename ArrayOutType, typename DeviceTag > - void IDWTHelper2DTopDown( + void IDWTHelper2DTopDown( const ArrayInType &coeffIn, vtkm::Id inDimX, vtkm::Id inDimY, vtkm::Id inStartX, vtkm::Id inStartY, @@ -1763,7 +1763,7 @@ public: ArrayOutType &ext3, ArrayOutType &ext4, // output vtkm::Id &ext1DimY, vtkm::Id &ext2DimY, // output vtkm::Id &ext3DimY, vtkm::Id &ext4DimY, // output - vtkm::Id filterLen, + vtkm::Id filterLen, DWTMode mode, DeviceTag ) { @@ -1773,31 +1773,31 @@ public: DWTMode cATopMode, cADownMode, cDTopMode, cDDownMode; cATopMode = cADownMode = cDTopMode = cDDownMode = mode; if( mode == SYMH ) - { + { cDTopMode = ASYMH; - if( inPretendDimY % 2 != 0 ) - { + if( inPretendDimY % 2 != 0 ) + { cADownMode = SYMW; cDDownMode = ASYMW; - } + } else { cDDownMode = ASYMH; } - } + } else // mode == SYMW - { + { cDTopMode = SYMH; - if( inPretendDimY % 2 != 0 ) - { + if( inPretendDimY % 2 != 0 ) + { cADownMode = SYMW; cDDownMode = SYMH; - } + } else { cADownMode = SYMH; } - } + } // determine length after extension vtkm::Id cAExtendedDimY, cDExtendedDimY; vtkm::Id cDPadLen = 0; @@ -1809,8 +1809,8 @@ public: // extend cA vtkm::Id cADimX = inPretendDimX; - this->Extend2D ( coeffIn, inDimX, inDimY, inStartX, inStartY, cADimX, cADimY, - ext1, ext2, addLen, cATopMode, cADownMode, + this->Extend2D ( coeffIn, inDimX, inDimY, inStartX, inStartY, cADimX, cADimY, + ext1, ext2, addLen, cATopMode, cADownMode, false, false, false, DeviceTag() ); ext1DimY = ext2DimY = addLen; @@ -1818,8 +1818,8 @@ public: vtkm::Id cDDimX = inPretendDimX; if( cDPadLen > 0 ) { - this->Extend2D ( coeffIn, inDimX, inDimY, inStartX, inStartY + cADimY, - cDDimX, cDDimY, ext3, ext4, addLen, cDTopMode, cDDownMode, + this->Extend2D ( coeffIn, inDimX, inDimY, inStartX, inStartY + cADimY, + cDDimX, cDDimY, ext3, ext4, addLen, cDTopMode, cDDownMode, true, false, false, DeviceTag() ); ext3DimY = addLen; ext4DimY = addLen + 1; @@ -1829,15 +1829,15 @@ public: vtkm::Id cDExtendedWouldBe = cDDimY + 2 * addLen; if( cDExtendedWouldBe == cDExtendedDimY ) { - this->Extend2D ( coeffIn, inDimX, inDimY, inStartX, inStartY + cADimY, - cDDimX, cDDimY, ext3, ext4, addLen, cDTopMode, cDDownMode, + this->Extend2D ( coeffIn, inDimX, inDimY, inStartX, inStartY + cADimY, + cDDimX, cDDimY, ext3, ext4, addLen, cDTopMode, cDDownMode, false, false, false, DeviceTag()); ext3DimY = ext4DimY = addLen; } else if( cDExtendedWouldBe == cDExtendedDimY - 1 ) { - this->Extend2D ( coeffIn, inDimX, inDimY, inStartX, inStartY + cADimY, - cDDimX, cDDimY, ext3, ext4, addLen, cDTopMode, cDDownMode, + this->Extend2D ( coeffIn, inDimX, inDimY, inStartX, inStartY + cADimY, + cDDimX, cDDimY, ext3, ext4, addLen, cDTopMode, cDDownMode, false, true, false, DeviceTag()); ext3DimY = addLen; ext4DimY = addLen + 1; @@ -1854,7 +1854,7 @@ public: // decides the correct extension modes for cA and cD separately, // and fill the extensions (3D cubes) template< typename ArrayInType, typename ArrayOutType, typename DeviceTag > - void IDWTHelper3DLeftRight( + void IDWTHelper3DLeftRight( const ArrayInType &coeffIn, vtkm::Id inDimX, vtkm::Id inDimY, vtkm::Id inDimZ, vtkm::Id inStartX, vtkm::Id inStartY, vtkm::Id inStartZ, @@ -1864,8 +1864,8 @@ public: ArrayOutType &ext3, ArrayOutType &ext4, // output vtkm::Id &ext1DimX, vtkm::Id &ext2DimX, // output vtkm::Id &ext3DimX, vtkm::Id &ext4DimX, // output - vtkm::Id filterLen, - DWTMode mode, + vtkm::Id filterLen, + DWTMode mode, DeviceTag ) { VTKM_ASSERT( inPretendDimX = cADimX + cDDimX ); @@ -1874,31 +1874,31 @@ public: DWTMode cALeftMode, cARightMode, cDLeftMode, cDRightMode; cALeftMode = cARightMode = cDLeftMode = cDRightMode = mode; if( mode == SYMH ) - { + { cDLeftMode = ASYMH; - if( inPretendDimX % 2 != 0 ) - { + if( inPretendDimX % 2 != 0 ) + { cARightMode = SYMW; cDRightMode = ASYMW; - } + } else { cDRightMode = ASYMH; } - } + } else // mode == SYMW - { + { cDLeftMode = SYMH; - if( inPretendDimX % 2 != 0 ) - { + if( inPretendDimX % 2 != 0 ) + { cARightMode = SYMW; cDRightMode = SYMH; - } + } else { cARightMode = SYMH; } - } + } // determine length after extension vtkm::Id cAExtendedDimX, cDExtendedDimX; @@ -1914,14 +1914,14 @@ public: // extend cA vtkm::Id cADimY = inPretendDimY; vtkm::Id cADimZ = inPretendDimZ; - this->Extend3DLeftRight( coeffIn, + this->Extend3DLeftRight( coeffIn, inDimX, inDimY, inDimZ, inStartX, inStartY, inStartZ, cADimX, cADimY, cADimZ, - ext1, ext2, - addLen, - cALeftMode, cARightMode, - false, false, + ext1, ext2, + addLen, + cALeftMode, cARightMode, + false, false, DeviceTag() ); ext1DimX = ext2DimX = addLen; @@ -1958,19 +1958,19 @@ public: vtkm::cont::ErrorInternal("cDTemp Length not match!"); } } - this->Extend3DLeftRight( coeffIn, + this->Extend3DLeftRight( coeffIn, inDimX, inDimY, inDimZ, inStartX + cADimX, inStartY, inStartZ, cDDimX, cDDimY, cDDimZ, - ext3, ext4, - addLen, - cDLeftMode, cDRightMode, + ext3, ext4, + addLen, + cDLeftMode, cDRightMode, pretendSigPaddedZero, padZeroAtExt2, DeviceTag() ); } template< typename ArrayInType, typename ArrayOutType, typename DeviceTag > - void IDWTHelper3DTopDown( + void IDWTHelper3DTopDown( const ArrayInType &coeffIn, vtkm::Id inDimX, vtkm::Id inDimY, vtkm::Id inDimZ, vtkm::Id inStartX, vtkm::Id inStartY, vtkm::Id inStartZ, @@ -1980,8 +1980,8 @@ public: ArrayOutType &ext3, ArrayOutType &ext4, // output vtkm::Id &ext1DimY, vtkm::Id &ext2DimY, // output vtkm::Id &ext3DimY, vtkm::Id &ext4DimY, // output - vtkm::Id filterLen, - DWTMode mode, + vtkm::Id filterLen, + DWTMode mode, DeviceTag ) { VTKM_ASSERT( inPretendDimY = cADimY + cDDimY ); @@ -1990,31 +1990,31 @@ public: DWTMode cATopMode, cADownMode, cDTopMode, cDDownMode; cATopMode = cADownMode = cDTopMode = cDDownMode = mode; if( mode == SYMH ) - { + { cDTopMode = ASYMH; - if( inPretendDimY % 2 != 0 ) - { + if( inPretendDimY % 2 != 0 ) + { cADownMode = SYMW; cDDownMode = ASYMW; - } + } else { cDDownMode = ASYMH; } - } + } else // mode == SYMW - { + { cDTopMode = SYMH; - if( inPretendDimY % 2 != 0 ) - { + if( inPretendDimY % 2 != 0 ) + { cADownMode = SYMW; cDDownMode = SYMH; - } + } else { cADownMode = SYMH; } - } + } // determine length after extension vtkm::Id cAExtendedDimY, cDExtendedDimY; @@ -2030,14 +2030,14 @@ public: // extend cA vtkm::Id cADimX = inPretendDimX; vtkm::Id cADimZ = inPretendDimZ; - this->Extend3DTopDown( coeffIn, + this->Extend3DTopDown( coeffIn, inDimX, inDimY, inDimZ, inStartX, inStartY, inStartZ, cADimX, cADimY, cADimZ, - ext1, ext2, - addLen, + ext1, ext2, + addLen, cATopMode, cADownMode, - false, false, + false, false, DeviceTag() ); ext1DimY = ext2DimY = addLen; @@ -2074,19 +2074,19 @@ public: vtkm::cont::ErrorInternal("cDTemp Length not match!"); } } - this->Extend3DTopDown( coeffIn, + this->Extend3DTopDown( coeffIn, inDimX, inDimY, inDimZ, inStartX, inStartY + cADimY, inStartZ, cDDimX, cDDimY, cDDimZ, - ext3, ext4, - addLen, - cDTopMode, cDDownMode, + ext3, ext4, + addLen, + cDTopMode, cDDownMode, pretendSigPaddedZero, padZeroAtExt2, DeviceTag() ); } template< typename ArrayInType, typename ArrayOutType, typename DeviceTag > - void IDWTHelper3DFrontBack( + void IDWTHelper3DFrontBack( const ArrayInType &coeffIn, vtkm::Id inDimX, vtkm::Id inDimY, vtkm::Id inDimZ, vtkm::Id inStartX, vtkm::Id inStartY, vtkm::Id inStartZ, @@ -2096,8 +2096,8 @@ public: ArrayOutType &ext3, ArrayOutType &ext4, // output vtkm::Id &ext1DimZ, vtkm::Id &ext2DimZ, // output vtkm::Id &ext3DimZ, vtkm::Id &ext4DimZ, // output - vtkm::Id filterLen, - DWTMode mode, + vtkm::Id filterLen, + DWTMode mode, DeviceTag ) { VTKM_ASSERT( inPretendDimZ = cADimZ + cDDimZ ); @@ -2106,31 +2106,31 @@ public: DWTMode cAFrontMode, cABackMode, cDFrontMode, cDBackMode; cAFrontMode = cABackMode = cDFrontMode = cDBackMode = mode; if( mode == SYMH ) - { + { cDFrontMode = ASYMH; - if( inPretendDimZ % 2 != 0 ) - { + if( inPretendDimZ % 2 != 0 ) + { cABackMode = SYMW; cDBackMode = ASYMW; - } + } else { cDBackMode = ASYMH; } - } + } else // mode == SYMW - { + { cDFrontMode = SYMH; - if( inPretendDimZ % 2 != 0 ) - { + if( inPretendDimZ % 2 != 0 ) + { cABackMode = SYMW; cDBackMode = SYMH; - } + } else { cABackMode = SYMH; } - } + } // determine length after extension vtkm::Id cAExtendedDimZ, cDExtendedDimZ; @@ -2146,14 +2146,14 @@ public: // extend cA vtkm::Id cADimX = inPretendDimX; vtkm::Id cADimY = inPretendDimY; - this->Extend3DFrontBack( coeffIn, + this->Extend3DFrontBack( coeffIn, inDimX, inDimY, inDimZ, inStartX, inStartY, inStartZ, cADimX, cADimY, cADimZ, - ext1, ext2, - addLen, + ext1, ext2, + addLen, cAFrontMode, cABackMode, - false, false, + false, false, DeviceTag() ); ext1DimZ = ext2DimZ = addLen; @@ -2190,21 +2190,21 @@ public: vtkm::cont::ErrorInternal("cDTemp Length not match!"); } } - this->Extend3DFrontBack( coeffIn, + this->Extend3DFrontBack( coeffIn, inDimX, inDimY, inDimZ, inStartX, inStartY, inStartZ + cADimZ, cDDimX, cDDimY, cDDimZ, - ext3, ext4, - addLen, - cDFrontMode, cDBackMode, + ext3, ext4, + addLen, + cDFrontMode, cDBackMode, pretendSigPaddedZero, padZeroAtExt2, DeviceTag() ); } -}; +}; } // namespace wavelets } // namespace worklet } // namespace vtkm -#endif +#endif diff --git a/vtkm/worklet/wavelets/WaveletFilter.h b/vtkm/worklet/wavelets/WaveletFilter.h index 11ce08e90..df3884c64 100644 --- a/vtkm/worklet/wavelets/WaveletFilter.h +++ b/vtkm/worklet/wavelets/WaveletFilter.h @@ -106,14 +106,14 @@ public: } } - vtkm::Id GetFilterLength() - { - return this->FilterLength; + vtkm::Id GetFilterLength() + { + return this->FilterLength; } - bool isSymmetric() - { - return this->Symmetricity; + bool isSymmetric() + { + return this->Symmetricity; } typedef vtkm::cont::ArrayHandle FilterType; diff --git a/vtkm/worklet/wavelets/WaveletTransforms.h b/vtkm/worklet/wavelets/WaveletTransforms.h index 07da3c1c1..289305e2e 100644 --- a/vtkm/worklet/wavelets/WaveletTransforms.h +++ b/vtkm/worklet/wavelets/WaveletTransforms.h @@ -31,9 +31,9 @@ namespace worklet { namespace wavelets { enum DWTMode { // boundary extension modes - SYMH, + SYMH, SYMW, - ASYMH, + ASYMH, ASYMW }; @@ -64,20 +64,20 @@ public: vtkm::Id sigstartX, vtkm::Id sigstartY, vtkm::Id sigstartZ, vtkm::Id sigpretendX, vtkm::Id sigpretendY, vtkm::Id sigpretendZ, DWTMode m, // SYMH, SYMW, etc. - ExtensionDirection dir, + ExtensionDirection dir, bool pad_zero ) - : + : extDimX( extdimX ), extDimY( extdimY ), extDimZ( extdimZ ), sigDimX( sigdimX ), sigDimY( sigdimY ), sigDimZ( sigdimZ ), sigStartX( sigstartX ), sigStartY( sigstartY ), sigStartZ( sigstartZ ), - sigPretendDimX( sigpretendX ), - sigPretendDimY( sigpretendY ), - sigPretendDimZ( sigpretendZ ), - mode(m), - direction( dir ), - padZero( pad_zero ) - { - (void)sigDimZ; + sigPretendDimX( sigpretendX ), + sigPretendDimY( sigpretendY ), + sigPretendDimZ( sigpretendZ ), + mode(m), + direction( dir ), + padZero( pad_zero ) + { + (void)sigDimZ; } // Index translation helper @@ -109,7 +109,7 @@ public: const PortalInType &portalIn, const vtkm::Id &workIndex) const { - vtkm::Id extX, extY, extZ; + vtkm::Id extX, extY, extZ; vtkm::Id sigPretendX, sigPretendY, sigPretendZ; Ext1Dto3D( workIndex, extX, extY, extZ ); typename PortalOutType::ValueType sym = 1.0; @@ -127,7 +127,7 @@ public: } else // mode == SYMW || mode == ASYMW { - sigPretendX = extDimX - extX; + sigPretendX = extDimX - extX; } } else if( direction == RIGHT ) @@ -147,7 +147,7 @@ public: sigPretendX++; } } - else if( direction == TOP ) + else if( direction == TOP ) { sigPretendX = extX; sigPretendZ = extZ; @@ -157,7 +157,7 @@ public: } else // mode == SYMW || mode == ASYMW { - sigPretendY = extDimY - extY; + sigPretendY = extDimY - extY; } } else if( direction == BOTTOM ) @@ -177,7 +177,7 @@ public: sigPretendY++; } } - else if( direction == FRONT ) + else if( direction == FRONT ) { sigPretendX = extX; sigPretendY = extY; @@ -187,7 +187,7 @@ public: } else // mode == SYMW || mode == ASYMW { - sigPretendZ = extDimZ - extZ; + sigPretendZ = extDimZ - extZ; } } else if( direction == BACK ) @@ -207,22 +207,22 @@ public: sigPretendZ++; } } - else + else { sigPretendX = sigPretendY = sigPretendZ = 0; // so the compiler doesn't complain vtkm::cont::ErrorInternal("Invalid extension mode for cubes!"); } - if( sigPretendX == sigPretendDimX || // decides to pad a zero - sigPretendY == sigPretendDimY || - sigPretendZ == sigPretendDimZ ) + if( sigPretendX == sigPretendDimX || // decides to pad a zero + sigPretendY == sigPretendDimY || + sigPretendZ == sigPretendDimZ ) { portalOut.Set( workIndex, 0.0 ); } else { - portalOut.Set( workIndex, sym * portalIn.Get( - SigPretend3Dto1D(sigPretendX, sigPretendY, sigPretendZ) )); + portalOut.Set( workIndex, sym * portalIn.Get( + SigPretend3Dto1D(sigPretendX, sigPretendY, sigPretendZ) )); } } @@ -247,24 +247,24 @@ private: // | / // | / // |/------------- X -// +// // The following 3 classes perform the same functionaliry in 3 directions class IndexTranslator3CubesLeftRight { public: - IndexTranslator3CubesLeftRight ( + IndexTranslator3CubesLeftRight( vtkm::Id x_1, vtkm::Id y_1, vtkm::Id z_1, vtkm::Id x_2, vtkm::Id y_2, vtkm::Id z_2, vtkm::Id startx_2, vtkm::Id starty_2, vtkm::Id startz_2, vtkm::Id pretendx_2, vtkm::Id pretendy_2, vtkm::Id pretendz_2, vtkm::Id x_3, vtkm::Id y_3, vtkm::Id z_3 ) - : + : dimX1(x_1), dimY1(y_1), dimZ1(z_1), dimX2(x_2), dimY2(y_2), dimZ2(z_2), startX2( startx_2 ), startY2( starty_2 ), startZ2(startz_2), pretendDimX2(pretendx_2), pretendDimY2(pretendy_2), pretendDimZ2(pretendz_2), dimX3(x_3), dimY3(y_3), dimZ3(z_3) - { + { (void)dimZ1; (void)dimZ2; (void)dimZ3; @@ -286,11 +286,11 @@ public: { cube = 1; idx = inZ * dimX1 * dimY1 + inY * dimX1 + inX; - } + } else if ( (dimX1 + pretendDimX2) <= inX && inX < (dimX1 + pretendDimX2 + dimX3) ) { vtkm::Id inX_local = inX - dimX1 - pretendDimX2; - cube = 3; + cube = 3; idx = inZ * dimX3 * dimY3 + inY * dimX3 + inX_local; } else @@ -300,30 +300,30 @@ public: } private: - const vtkm::Id dimX1, dimY1, dimZ1; // left extension - const vtkm::Id dimX2, dimY2, dimZ2; // actual signal dims - const vtkm::Id startX2, startY2, startZ2, pretendDimX2, pretendDimY2, pretendDimZ2; - const vtkm::Id dimX3, dimY3, dimZ3; // right extension + const vtkm::Id dimX1, dimY1, dimZ1; // left extension + const vtkm::Id dimX2, dimY2, dimZ2; // actual signal dims + const vtkm::Id startX2, startY2, startZ2, pretendDimX2, pretendDimY2, pretendDimZ2; + const vtkm::Id dimX3, dimY3, dimZ3; // right extension }; class IndexTranslator3CubesTopDown { public: - IndexTranslator3CubesTopDown ( + IndexTranslator3CubesTopDown ( vtkm::Id x_1, vtkm::Id y_1, vtkm::Id z_1, vtkm::Id x_2, vtkm::Id y_2, vtkm::Id z_2, vtkm::Id startx_2, vtkm::Id starty_2, vtkm::Id startz_2, vtkm::Id pretendx_2, vtkm::Id pretendy_2, vtkm::Id pretendz_2, vtkm::Id x_3, vtkm::Id y_3, vtkm::Id z_3 ) - : + : dimX1(x_1), dimY1(y_1), dimZ1(z_1), dimX2(x_2), dimY2(y_2), dimZ2(z_2), startX2( startx_2 ), startY2( starty_2 ), startZ2(startz_2), pretendDimX2(pretendx_2), pretendDimY2(pretendy_2), pretendDimZ2(pretendz_2), dimX3(x_3), dimY3(y_3), dimZ3(z_3) - { - (void)dimZ1; - (void)dimZ2; + { + (void)dimZ1; + (void)dimZ2; (void)dimZ3; (void)pretendDimX2; (void)pretendDimZ2; @@ -357,28 +357,28 @@ public: } private: - const vtkm::Id dimX1, dimY1, dimZ1; // left extension - const vtkm::Id dimX2, dimY2, dimZ2; // actual signal dims - const vtkm::Id startX2, startY2, startZ2, pretendDimX2, pretendDimY2, pretendDimZ2; - const vtkm::Id dimX3, dimY3, dimZ3; // right extension + const vtkm::Id dimX1, dimY1, dimZ1; // left extension + const vtkm::Id dimX2, dimY2, dimZ2; // actual signal dims + const vtkm::Id startX2, startY2, startZ2, pretendDimX2, pretendDimY2, pretendDimZ2; + const vtkm::Id dimX3, dimY3, dimZ3; // right extension }; class IndexTranslator3CubesFrontBack { public: - IndexTranslator3CubesFrontBack ( + IndexTranslator3CubesFrontBack ( vtkm::Id x_1, vtkm::Id y_1, vtkm::Id z_1, vtkm::Id x_2, vtkm::Id y_2, vtkm::Id z_2, vtkm::Id startx_2, vtkm::Id starty_2, vtkm::Id startz_2, vtkm::Id pretendx_2, vtkm::Id pretendy_2, vtkm::Id pretendz_2, vtkm::Id x_3, vtkm::Id y_3, vtkm::Id z_3 ) - : + : dimX1(x_1), dimY1(y_1), dimZ1(z_1), dimX2(x_2), dimY2(y_2), dimZ2(z_2), startX2( startx_2 ), startY2( starty_2 ), startZ2(startz_2), pretendDimX2(pretendx_2), pretendDimY2(pretendy_2), pretendDimZ2(pretendz_2), dimX3(x_3), dimY3(y_3), dimZ3(z_3) - { + { (void)dimZ2; (void)pretendDimX2; (void)pretendDimY2; @@ -412,10 +412,10 @@ public: } private: - const vtkm::Id dimX1, dimY1, dimZ1; // left extension - const vtkm::Id dimX2, dimY2, dimZ2; // actual signal dims - const vtkm::Id startX2, startY2, startZ2, pretendDimX2, pretendDimY2, pretendDimZ2; - const vtkm::Id dimX3, dimY3, dimZ3; // right extension + const vtkm::Id dimX1, dimY1, dimZ1; // left extension + const vtkm::Id dimX2, dimY2, dimZ2; // actual signal dims + const vtkm::Id startX2, startY2, startZ2, pretendDimX2, pretendDimY2, pretendDimZ2; + const vtkm::Id dimX3, dimY3, dimZ3; // right extension }; @@ -433,7 +433,7 @@ private: class IndexTranslator6CubesLeftRight { public: - IndexTranslator6CubesLeftRight( + IndexTranslator6CubesLeftRight( vtkm::Id x_1, vtkm::Id y_1, vtkm::Id z_1, vtkm::Id x_2, vtkm::Id y_2, vtkm::Id z_2, vtkm::Id x_3, vtkm::Id y_3, vtkm::Id z_3, @@ -442,7 +442,7 @@ public: vtkm::Id x_d, vtkm::Id y_d, vtkm::Id z_d, vtkm::Id x_5, vtkm::Id y_5, vtkm::Id z_5, vtkm::Id start_x5, vtkm::Id start_y5, vtkm::Id start_z5 ) - : + : dimX1(x_1), dimY1(y_1), dimZ1(z_1), dimX2(x_2), dimY2(y_2), dimZ2(z_2), dimX3(x_3), dimY3(y_3), dimZ3(z_3), @@ -451,7 +451,7 @@ public: dimXd(x_d), dimYd(y_d), dimZd(z_d), dimX5(x_5), dimY5(y_5), dimZ5(z_5), startX5(start_x5), startY5(start_y5), startZ5(start_z5) - { + { (void)dimYa; (void)dimYd; (void)dimZa; @@ -483,7 +483,7 @@ public: { cube = 1; // ext1 idx = inZ * dimX1 * dimY1 + inY * dimX1 + inX; - } + } else if ( (dimX1 + dimXa) <= inX && inX < (dimX1 + dimXa + dimX2) ) { vtkm::Id inX_local = inX - dimX1 - dimXa; @@ -496,7 +496,7 @@ public: cube = 3; // ext3 idx = inZ * dimX3 * dimY3 + inY * dimX3 + inX_local; } - else if ( (dimX1 + dimXa + dimX2 + dimX3 + dimXd) <= inX && + else if ( (dimX1 + dimXa + dimX2 + dimX3 + dimXd) <= inX && inX < (dimX1 + dimXa + dimX2 + dimX3 + dimXd + dimX4) ) { vtkm::Id inX_local = inX - dimX1 - dimXa - dimX2 - dimX3 - dimXd; @@ -519,7 +519,7 @@ private: class IndexTranslator6CubesTopDown { public: - IndexTranslator6CubesTopDown( + IndexTranslator6CubesTopDown( vtkm::Id x_1, vtkm::Id y_1, vtkm::Id z_1, vtkm::Id x_2, vtkm::Id y_2, vtkm::Id z_2, vtkm::Id x_3, vtkm::Id y_3, vtkm::Id z_3, @@ -528,7 +528,7 @@ public: vtkm::Id x_d, vtkm::Id y_d, vtkm::Id z_d, vtkm::Id x_5, vtkm::Id y_5, vtkm::Id z_5, vtkm::Id start_x5, vtkm::Id start_y5, vtkm::Id start_z5 ) - : + : dimX1(x_1), dimY1(y_1), dimZ1(z_1), dimX2(x_2), dimY2(y_2), dimZ2(z_2), dimX3(x_3), dimY3(y_3), dimZ3(z_3), @@ -537,7 +537,7 @@ public: dimXd(x_d), dimYd(y_d), dimZd(z_d), dimX5(x_5), dimY5(y_5), dimZ5(z_5), startX5(start_x5), startY5(start_y5), startZ5(start_z5) - { + { (void)dimXa; (void)dimXd; (void)dimZd; @@ -582,7 +582,7 @@ public: cube = 3; // ext3 idx = inZ * dimX3 * dimY3 + inY_local * dimX3 + inX; } - else if ( (dimY1 + dimYa + dimY2 + dimY3 + dimYd) <= inY && + else if ( (dimY1 + dimYa + dimY2 + dimY3 + dimYd) <= inY && inY < (dimY1 + dimYa + dimY2 + dimY3 + dimYd + dimY4) ) { vtkm::Id inY_local = inY - dimY1 - dimYa - dimY2 - dimY3 - dimYd; @@ -606,7 +606,7 @@ class IndexTranslator6CubesFrontBack { public: VTKM_EXEC_CONT - IndexTranslator6CubesFrontBack( + IndexTranslator6CubesFrontBack( vtkm::Id x_1, vtkm::Id y_1, vtkm::Id z_1, vtkm::Id x_2, vtkm::Id y_2, vtkm::Id z_2, vtkm::Id x_3, vtkm::Id y_3, vtkm::Id z_3, @@ -615,7 +615,7 @@ public: vtkm::Id x_d, vtkm::Id y_d, vtkm::Id z_d, vtkm::Id x_5, vtkm::Id y_5, vtkm::Id z_5, vtkm::Id start_x5, vtkm::Id start_y5, vtkm::Id start_z5 ) - : + : dimX1(x_1), dimY1(y_1), dimZ1(z_1), dimX2(x_2), dimY2(y_2), dimZ2(z_2), dimX3(x_3), dimY3(y_3), dimZ3(z_3), @@ -665,7 +665,7 @@ public: cube = 3; // ext3 idx = inZ_local * dimX3 * dimY3 + inY * dimX3 + inX; } - else if ( (dimZ1 + dimZa + dimZ2 + dimZ3 + dimZd) <= inZ && + else if ( (dimZ1 + dimZa + dimZ2 + dimZ3 + dimZd) <= inZ && inZ < (dimZ1 + dimZa + dimZ2 + dimZ3 + dimZd + dimZ4) ) { vtkm::Id inZ_local = inZ - dimZ1 - dimZa - dimZ2 - dimZ3 - dimZd; @@ -702,42 +702,42 @@ public: typedef _4 InputDomain; VTKM_EXEC_CONT - ForwardTransform3DLeftRight ( + ForwardTransform3DLeftRight ( const vtkm::cont::ArrayHandle &loFilter, const vtkm::cont::ArrayHandle &hiFilter, - vtkm::Id filter_len, - vtkm::Id approx_len, - bool odd_low, + vtkm::Id filter_len, + vtkm::Id approx_len, + bool odd_low, vtkm::Id dimX1, vtkm::Id dimY1, vtkm::Id dimZ1, vtkm::Id dimX2, vtkm::Id dimY2, vtkm::Id dimZ2, vtkm::Id startX2, vtkm::Id startY2, vtkm::Id startZ2, vtkm::Id pretendX2, vtkm::Id pretendY2, vtkm::Id pretendZ2, - vtkm::Id dimX3, vtkm::Id dimY3, vtkm::Id dimZ3 ) - : + vtkm::Id dimX3, vtkm::Id dimY3, vtkm::Id dimZ3 ) + : lowFilter( loFilter.PrepareForInput( DeviceTag() ) ), highFilter( hiFilter.PrepareForInput( DeviceTag() ) ), - filterLen( filter_len ), + filterLen( filter_len ), approxLen( approx_len ), outDimX( pretendX2 ), outDimY( pretendY2 ), outDimZ( pretendZ2 ), translator( dimX1, dimY1, dimZ1, dimX2, dimY2, dimZ2, startX2, startY2, startZ2, - pretendX2, pretendY2, pretendZ2, + pretendX2, pretendY2, pretendZ2, dimX3, dimY3, dimZ3 ) - { + { this->lstart = odd_low ? 1 : 0; this->hstart = 1; } VTKM_EXEC_CONT - void Output1Dto3D( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y, vtkm::Id &z ) const + void Output1Dto3D( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y, vtkm::Id &z ) const { z = idx / (outDimX * outDimY); y = (idx - z * outDimX * outDimY) / outDimX; x = idx % outDimX; } VTKM_EXEC_CONT - vtkm::Id Output3Dto1D( vtkm::Id x, vtkm::Id y, vtkm::Id z ) const + vtkm::Id Output3Dto1D( vtkm::Id x, vtkm::Id y, vtkm::Id z ) const { return z * outDimX * outDimY + y * outDimX + x; } @@ -768,8 +768,8 @@ public: return -1; } } - - template VTKM_EXEC_CONT void operator()(const InPortalType1 &inPortal1, // left extension @@ -790,7 +790,7 @@ public: for( vtkm::Id k = filterLen - 1; k > -1; k-- ) { translator.Translate3Dto1D( xl, workY, workZ, inputCube, inputIdx ); - sum += lowFilter.Get(k) * + sum += lowFilter.Get(k) * GetVal( inPortal1, inPortal2, inPortal3, inputCube, inputIdx ); xl++; } @@ -804,7 +804,7 @@ public: for( vtkm::Id k = filterLen - 1; k > -1; k-- ) { translator.Translate3Dto1D( xh, workY, workZ, inputCube, inputIdx ); - sum += highFilter.Get(k) * + sum += highFilter.Get(k) * GetVal( inPortal1, inPortal2, inPortal3, inputCube, inputIdx ); xh++; } @@ -816,7 +816,7 @@ public: #undef VAL private: - const typename vtkm::cont::ArrayHandle::ExecutionTypes::PortalConst + const typename vtkm::cont::ArrayHandle::ExecutionTypes::PortalConst lowFilter, highFilter; const vtkm::Id filterLen, approxLen; const vtkm::Id outDimX, outDimY, outDimZ; @@ -836,42 +836,42 @@ public: typedef _4 InputDomain; VTKM_EXEC_CONT - ForwardTransform3DTopDown ( + ForwardTransform3DTopDown ( const vtkm::cont::ArrayHandle &loFilter, const vtkm::cont::ArrayHandle &hiFilter, - vtkm::Id filter_len, - vtkm::Id approx_len, - bool odd_low, + vtkm::Id filter_len, + vtkm::Id approx_len, + bool odd_low, vtkm::Id dimX1, vtkm::Id dimY1, vtkm::Id dimZ1, vtkm::Id dimX2, vtkm::Id dimY2, vtkm::Id dimZ2, vtkm::Id startX2, vtkm::Id startY2, vtkm::Id startZ2, vtkm::Id pretendX2, vtkm::Id pretendY2, vtkm::Id pretendZ2, - vtkm::Id dimX3, vtkm::Id dimY3, vtkm::Id dimZ3 ) - : + vtkm::Id dimX3, vtkm::Id dimY3, vtkm::Id dimZ3 ) + : lowFilter( loFilter.PrepareForInput( DeviceTag() ) ), highFilter( hiFilter.PrepareForInput( DeviceTag() ) ), - filterLen( filter_len ), + filterLen( filter_len ), approxLen( approx_len ), outDimX( pretendX2 ), outDimY( pretendY2 ), outDimZ( pretendZ2 ), translator( dimX1, dimY1, dimZ1, dimX2, dimY2, dimZ2, startX2, startY2, startZ2, - pretendX2, pretendY2, pretendZ2, + pretendX2, pretendY2, pretendZ2, dimX3, dimY3, dimZ3 ) - { + { this->lstart = odd_low ? 1 : 0; this->hstart = 1; } VTKM_EXEC_CONT - void Output1Dto3D( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y, vtkm::Id &z ) const + void Output1Dto3D( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y, vtkm::Id &z ) const { z = idx / (outDimX * outDimY); y = (idx - z * outDimX * outDimY) / outDimX; x = idx % outDimX; } VTKM_EXEC_CONT - vtkm::Id Output3Dto1D( vtkm::Id x, vtkm::Id y, vtkm::Id z ) const + vtkm::Id Output3Dto1D( vtkm::Id x, vtkm::Id y, vtkm::Id z ) const { return z * outDimX * outDimY + y * outDimX + x; } @@ -902,8 +902,8 @@ public: return -1; } } - - template VTKM_EXEC_CONT void operator()(const InPortalType1 &inPortal1, // top extension @@ -924,7 +924,7 @@ public: for( vtkm::Id k = filterLen - 1; k > -1; k-- ) { translator.Translate3Dto1D( workX, yl, workZ, inputCube, inputIdx ); - sum += lowFilter.Get(k) * + sum += lowFilter.Get(k) * GetVal( inPortal1, inPortal2, inPortal3, inputCube, inputIdx ); yl++; } @@ -938,7 +938,7 @@ public: for( vtkm::Id k = filterLen - 1; k > -1; k-- ) { translator.Translate3Dto1D( workX, yh, workZ, inputCube, inputIdx ); - sum += highFilter.Get(k) * + sum += highFilter.Get(k) * GetVal( inPortal1, inPortal2, inPortal3, inputCube, inputIdx ); yh++; } @@ -950,7 +950,7 @@ public: #undef VAL private: - const typename vtkm::cont::ArrayHandle::ExecutionTypes::PortalConst + const typename vtkm::cont::ArrayHandle::ExecutionTypes::PortalConst lowFilter, highFilter; const vtkm::Id filterLen, approxLen; const vtkm::Id outDimX, outDimY, outDimZ; @@ -970,42 +970,42 @@ public: typedef _4 InputDomain; VTKM_EXEC_CONT - ForwardTransform3DFrontBack ( + ForwardTransform3DFrontBack ( const vtkm::cont::ArrayHandle &loFilter, const vtkm::cont::ArrayHandle &hiFilter, - vtkm::Id filter_len, - vtkm::Id approx_len, - bool odd_low, + vtkm::Id filter_len, + vtkm::Id approx_len, + bool odd_low, vtkm::Id dimX1, vtkm::Id dimY1, vtkm::Id dimZ1, vtkm::Id dimX2, vtkm::Id dimY2, vtkm::Id dimZ2, vtkm::Id startX2, vtkm::Id startY2, vtkm::Id startZ2, vtkm::Id pretendX2, vtkm::Id pretendY2, vtkm::Id pretendZ2, - vtkm::Id dimX3, vtkm::Id dimY3, vtkm::Id dimZ3 ) - : + vtkm::Id dimX3, vtkm::Id dimY3, vtkm::Id dimZ3 ) + : lowFilter( loFilter.PrepareForInput( DeviceTag() ) ), highFilter( hiFilter.PrepareForInput( DeviceTag() ) ), - filterLen( filter_len ), + filterLen( filter_len ), approxLen( approx_len ), outDimX( pretendX2 ), outDimY( pretendY2 ), outDimZ( pretendZ2 ), translator( dimX1, dimY1, dimZ1, dimX2, dimY2, dimZ2, startX2, startY2, startZ2, - pretendX2, pretendY2, pretendZ2, + pretendX2, pretendY2, pretendZ2, dimX3, dimY3, dimZ3 ) - { + { this->lstart = odd_low ? 1 : 0; this->hstart = 1; } VTKM_EXEC_CONT - void Output1Dto3D( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y, vtkm::Id &z ) const + void Output1Dto3D( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y, vtkm::Id &z ) const { z = idx / (outDimX * outDimY); y = (idx - z * outDimX * outDimY) / outDimX; x = idx % outDimX; } VTKM_EXEC_CONT - vtkm::Id Output3Dto1D( vtkm::Id x, vtkm::Id y, vtkm::Id z ) const + vtkm::Id Output3Dto1D( vtkm::Id x, vtkm::Id y, vtkm::Id z ) const { return z * outDimX * outDimY + y * outDimX + x; } @@ -1036,8 +1036,8 @@ public: return -1; } } - - template VTKM_EXEC_CONT void operator()(const InPortalType1 &inPortal1, // top extension @@ -1058,7 +1058,7 @@ public: for( vtkm::Id k = filterLen - 1; k > -1; k-- ) { translator.Translate3Dto1D( workX, workY, zl, inputCube, inputIdx ); - sum += lowFilter.Get(k) * + sum += lowFilter.Get(k) * GetVal( inPortal1, inPortal2, inPortal3, inputCube, inputIdx ); zl++; } @@ -1072,7 +1072,7 @@ public: for( vtkm::Id k = filterLen - 1; k > -1; k-- ) { translator.Translate3Dto1D( workX, workY, zh, inputCube, inputIdx ); - sum += highFilter.Get(k) * + sum += highFilter.Get(k) * GetVal( inPortal1, inPortal2, inPortal3, inputCube, inputIdx ); zh++; } @@ -1084,7 +1084,7 @@ public: #undef VAL private: - const typename vtkm::cont::ArrayHandle::ExecutionTypes::PortalConst + const typename vtkm::cont::ArrayHandle::ExecutionTypes::PortalConst lowFilter, highFilter; const vtkm::Id filterLen, approxLen; const vtkm::Id outDimX, outDimY, outDimZ; @@ -1122,22 +1122,22 @@ public: // Constructor VTKM_EXEC_CONT - InverseTransform3DLeftRight( + InverseTransform3DLeftRight( const vtkm::cont::ArrayHandle &lo_fil, const vtkm::cont::ArrayHandle &hi_fil, - vtkm::Id fil_len, - vtkm::Id x_1, vtkm::Id y_1, vtkm::Id z_1, // ext1 + vtkm::Id fil_len, + vtkm::Id x_1, vtkm::Id y_1, vtkm::Id z_1, // ext1 vtkm::Id x_2, vtkm::Id y_2, vtkm::Id z_2, // ext2 vtkm::Id x_3, vtkm::Id y_3, vtkm::Id z_3, // ext3 vtkm::Id x_4, vtkm::Id y_4, vtkm::Id z_4, // ext4 - vtkm::Id x_a, vtkm::Id y_a, vtkm::Id z_a, // cA + vtkm::Id x_a, vtkm::Id y_a, vtkm::Id z_a, // cA vtkm::Id x_d, vtkm::Id y_d, vtkm::Id z_d, // cD - vtkm::Id x_5, vtkm::Id y_5, vtkm::Id z_5, // signal, actual dims - vtkm::Id startX5, vtkm::Id startY5, vtkm::Id startZ5 ) - : + vtkm::Id x_5, vtkm::Id y_5, vtkm::Id z_5, // signal, actual dims + vtkm::Id startX5, vtkm::Id startY5, vtkm::Id startZ5 ) + : lowFilter( lo_fil.PrepareForInput( DeviceTag() ) ), highFilter( hi_fil.PrepareForInput( DeviceTag() ) ), - filterLen( fil_len ), + filterLen( fil_len ), outDimX(x_a + x_d), outDimY( y_a ), outDimZ( z_a ), cALenExtended( x_1 + x_a + x_2 ), translator(x_1, y_1, z_1, @@ -1149,7 +1149,7 @@ public: x_5, y_5, z_5, startX5, startY5, startZ5 ) { } - + VTKM_EXEC_CONT void Output1Dto3D( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y, vtkm::Id &z ) const { @@ -1157,19 +1157,19 @@ public: y = (idx - z * outDimX * outDimY) / outDimX; x = idx % outDimX; } - + // Use 64-bit float for convolution calculation #define VAL vtkm::Float64 #define MAKEVAL(a) (static_cast(a)) template VTKM_EXEC_CONT - VAL GetVal( const InPortalType1 &ext1, + VAL GetVal( const InPortalType1 &ext1, const InPortalType2 &ext2, - const InPortalType3 &ext3, + const InPortalType3 &ext3, const InPortalType4 &ext4, - const InPortalType5 &sig5, - vtkm::Id inCube, + const InPortalType5 &sig5, + vtkm::Id inCube, vtkm::Id inIdx ) const { if( inCube == 2 ) @@ -1212,7 +1212,7 @@ public: { vtkm::Id workX, workY, workZ; vtkm::Id k1, k2, xi; - vtkm::Id inputCube, inputIdx; + vtkm::Id inputCube, inputIdx; Output1Dto3D( workIdx, workX, workY, workZ ); if( filterLen % 2 != 0 ) // odd filter @@ -1231,18 +1231,18 @@ public: while( k1 > -1 ) { translator.Translate3Dto1D( xi, workY, workZ, inputCube, inputIdx ); - sum += lowFilter.Get(k1) * GetVal( portal1, portal2, portal3, portal4, portal5, + sum += lowFilter.Get(k1) * GetVal( portal1, portal2, portal3, portal4, portal5, inputCube, inputIdx ); - xi++; + xi++; k1 -= 2; } xi = workX / 2; while( k2 > -1 ) { translator.Translate3Dto1D( xi + cALenExtended, workY, workZ, inputCube, inputIdx ); - sum += highFilter.Get(k2) * GetVal( portal1, portal2, portal3, portal4, portal5, + sum += highFilter.Get(k2) * GetVal( portal1, portal2, portal3, portal4, portal5, inputCube, inputIdx ); - xi++; + xi++; k2 -= 2; } coeffOut = static_cast< OutputValueType> (sum); @@ -1292,7 +1292,7 @@ public: #undef VAL private: - const typename vtkm::cont::ArrayHandle::ExecutionTypes::PortalConst + const typename vtkm::cont::ArrayHandle::ExecutionTypes::PortalConst lowFilter, highFilter; const vtkm::Id filterLen; vtkm::Id outDimX, outDimY, outDimZ; @@ -1315,22 +1315,22 @@ public: // Constructor VTKM_EXEC_CONT - InverseTransform3DTopDown( + InverseTransform3DTopDown( const vtkm::cont::ArrayHandle &lo_fil, const vtkm::cont::ArrayHandle &hi_fil, - vtkm::Id fil_len, - vtkm::Id x_1, vtkm::Id y_1, vtkm::Id z_1, // ext1 + vtkm::Id fil_len, + vtkm::Id x_1, vtkm::Id y_1, vtkm::Id z_1, // ext1 vtkm::Id x_2, vtkm::Id y_2, vtkm::Id z_2, // ext2 vtkm::Id x_3, vtkm::Id y_3, vtkm::Id z_3, // ext3 vtkm::Id x_4, vtkm::Id y_4, vtkm::Id z_4, // ext4 - vtkm::Id x_a, vtkm::Id y_a, vtkm::Id z_a, // cA + vtkm::Id x_a, vtkm::Id y_a, vtkm::Id z_a, // cA vtkm::Id x_d, vtkm::Id y_d, vtkm::Id z_d, // cD - vtkm::Id x_5, vtkm::Id y_5, vtkm::Id z_5, // signal, actual dims - vtkm::Id startX5, vtkm::Id startY5, vtkm::Id startZ5 ) - : + vtkm::Id x_5, vtkm::Id y_5, vtkm::Id z_5, // signal, actual dims + vtkm::Id startX5, vtkm::Id startY5, vtkm::Id startZ5 ) + : lowFilter( lo_fil.PrepareForInput( DeviceTag() ) ), highFilter( hi_fil.PrepareForInput( DeviceTag() ) ), - filterLen( fil_len ), + filterLen( fil_len ), outDimX( x_a ), outDimY(y_a + y_d), outDimZ( z_a ), cALenExtended( y_1 + y_a + y_2 ), translator(x_1, y_1, z_1, @@ -1342,7 +1342,7 @@ public: x_5, y_5, z_5, startX5, startY5, startZ5 ) { } - + VTKM_EXEC_CONT void Output1Dto3D( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y, vtkm::Id &z ) const { @@ -1350,19 +1350,19 @@ public: y = (idx - z * outDimX * outDimY) / outDimX; x = idx % outDimX; } - + // Use 64-bit float for convolution calculation #define VAL vtkm::Float64 #define MAKEVAL(a) (static_cast(a)) template VTKM_EXEC_CONT - VAL GetVal( const InPortalType1 &ext1, + VAL GetVal( const InPortalType1 &ext1, const InPortalType2 &ext2, - const InPortalType3 &ext3, + const InPortalType3 &ext3, const InPortalType4 &ext4, - const InPortalType5 &sig5, - vtkm::Id inCube, + const InPortalType5 &sig5, + vtkm::Id inCube, vtkm::Id inIdx ) const { if( inCube == 2 ) @@ -1405,19 +1405,19 @@ public: { vtkm::Id workX, workY, workZ; vtkm::Id k1, k2, yi; - vtkm::Id inputCube, inputIdx; + vtkm::Id inputCube, inputIdx; Output1Dto3D( workIdx, workX, workY, workZ ); if( filterLen % 2 != 0 ) // odd filter { if( workY % 2 != 0 ) { - k1 = filterLen - 2; + k1 = filterLen - 2; k2 = filterLen - 1; } else { - k1 = filterLen - 1; + k1 = filterLen - 1; k2 = filterLen - 2; } @@ -1426,7 +1426,7 @@ public: while( k1 > -1 ) { translator.Translate3Dto1D( workX, yi, workZ, inputCube, inputIdx ); - sum += lowFilter.Get(k1) * GetVal( portal1, portal2, portal3, portal4, portal5, + sum += lowFilter.Get(k1) * GetVal( portal1, portal2, portal3, portal4, portal5, inputCube, inputIdx ); yi++; k1 -= 2; @@ -1435,7 +1435,7 @@ public: while( k2 > -1 ) { translator.Translate3Dto1D( workX, yi + cALenExtended, workZ, inputCube, inputIdx ); - sum += highFilter.Get(k2) * GetVal( portal1, portal2, portal3, portal4, portal5, + sum += highFilter.Get(k2) * GetVal( portal1, portal2, portal3, portal4, portal5, inputCube, inputIdx ); yi++; k2 -= 2; @@ -1487,7 +1487,7 @@ public: #undef VAL private: - const typename vtkm::cont::ArrayHandle::ExecutionTypes::PortalConst + const typename vtkm::cont::ArrayHandle::ExecutionTypes::PortalConst lowFilter, highFilter; const vtkm::Id filterLen; vtkm::Id outDimX, outDimY, outDimZ; @@ -1510,22 +1510,22 @@ public: // Constructor VTKM_EXEC_CONT - InverseTransform3DFrontBack( + InverseTransform3DFrontBack( const vtkm::cont::ArrayHandle &lo_fil, const vtkm::cont::ArrayHandle &hi_fil, - vtkm::Id fil_len, - vtkm::Id x_1, vtkm::Id y_1, vtkm::Id z_1, // ext1 + vtkm::Id fil_len, + vtkm::Id x_1, vtkm::Id y_1, vtkm::Id z_1, // ext1 vtkm::Id x_2, vtkm::Id y_2, vtkm::Id z_2, // ext2 vtkm::Id x_3, vtkm::Id y_3, vtkm::Id z_3, // ext3 vtkm::Id x_4, vtkm::Id y_4, vtkm::Id z_4, // ext4 - vtkm::Id x_a, vtkm::Id y_a, vtkm::Id z_a, // cA + vtkm::Id x_a, vtkm::Id y_a, vtkm::Id z_a, // cA vtkm::Id x_d, vtkm::Id y_d, vtkm::Id z_d, // cD - vtkm::Id x_5, vtkm::Id y_5, vtkm::Id z_5, // signal, actual dims - vtkm::Id startX5, vtkm::Id startY5, vtkm::Id startZ5 ) - : + vtkm::Id x_5, vtkm::Id y_5, vtkm::Id z_5, // signal, actual dims + vtkm::Id startX5, vtkm::Id startY5, vtkm::Id startZ5 ) + : lowFilter( lo_fil.PrepareForInput( DeviceTag() ) ), highFilter( hi_fil.PrepareForInput( DeviceTag() ) ), - filterLen( fil_len ), + filterLen( fil_len ), outDimX( x_a ), outDimY( y_a ), outDimZ(z_a + z_d), cALenExtended( z_1 + z_a + z_2 ), translator(x_1, y_1, z_1, @@ -1536,11 +1536,11 @@ public: x_d, y_d, z_d, x_5, y_5, z_5, startX5, startY5, startZ5 ) - { + { /* printf("InverseTransform3DFrontBack: \n"); printf(" output dims: (%lld, %lld, %lld)\n", outDimX, outDimY, outDimZ ); */ } - + VTKM_EXEC_CONT void Output1Dto3D( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y, vtkm::Id &z ) const { @@ -1548,19 +1548,19 @@ public: y = (idx - z * outDimX * outDimY) / outDimX; x = idx % outDimX; } - + // Use 64-bit float for convolution calculation #define VAL vtkm::Float64 #define MAKEVAL(a) (static_cast(a)) template VTKM_EXEC_CONT - VAL GetVal( const InPortalType1 &ext1, + VAL GetVal( const InPortalType1 &ext1, const InPortalType2 &ext2, - const InPortalType3 &ext3, + const InPortalType3 &ext3, const InPortalType4 &ext4, - const InPortalType5 &sig5, - vtkm::Id inCube, + const InPortalType5 &sig5, + vtkm::Id inCube, vtkm::Id inIdx ) const { if( inCube == 2 ) @@ -1602,20 +1602,20 @@ public: const vtkm::Id &workIdx ) const { vtkm::Id workX, workY, workZ; - vtkm::Id k1, k2, zi; - vtkm::Id inputCube, inputIdx; + vtkm::Id k1, k2, zi; + vtkm::Id inputCube, inputIdx; Output1Dto3D( workIdx, workX, workY, workZ ); if( filterLen % 2 != 0 ) // odd filter { if( workZ % 2 != 0 ) { - k1 = filterLen - 2; + k1 = filterLen - 2; k2 = filterLen - 1; } else { - k1 = filterLen - 1; + k1 = filterLen - 1; k2 = filterLen - 2; } @@ -1624,7 +1624,7 @@ public: while( k1 > -1 ) { translator.Translate3Dto1D( workX, workY, zi, inputCube, inputIdx ); - sum += lowFilter.Get(k1) * GetVal( portal1, portal2, portal3, portal4, portal5, + sum += lowFilter.Get(k1) * GetVal( portal1, portal2, portal3, portal4, portal5, inputCube, inputIdx ); zi++; k1 -= 2; @@ -1633,7 +1633,7 @@ public: while( k2 > -1 ) { translator.Translate3Dto1D( workX, workY, zi + cALenExtended, inputCube, inputIdx ); - sum += highFilter.Get(k2) * GetVal( portal1, portal2, portal3, portal4, portal5, + sum += highFilter.Get(k2) * GetVal( portal1, portal2, portal3, portal4, portal5, inputCube, inputIdx ); zi++; k2 -= 2; @@ -1685,7 +1685,7 @@ public: #undef VAL private: - const typename vtkm::cont::ArrayHandle::ExecutionTypes::PortalConst + const typename vtkm::cont::ArrayHandle::ExecutionTypes::PortalConst lowFilter, highFilter; const vtkm::Id filterLen; vtkm::Id outDimX, outDimY, outDimZ; @@ -1705,33 +1705,33 @@ private: // | (x1) | (xa) | (x2) | (x3) | (xd) | (x4) | // | | | | | | | // ---------------------------------------------------- -// matrix1: ext1 -// matrix2: ext2 -// matrix3: ext3 -// matrix4: ext4 +// matrix1: ext1 +// matrix2: ext2 +// matrix3: ext3 +// matrix4: ext4 // matrix5: cA + cD class IndexTranslator6Matrices { public: - IndexTranslator6Matrices( vtkm::Id x_1, vtkm::Id y_1, - vtkm::Id x_a, vtkm::Id y_a, - vtkm::Id x_2, vtkm::Id y_2, + IndexTranslator6Matrices( vtkm::Id x_1, vtkm::Id y_1, + vtkm::Id x_a, vtkm::Id y_a, + vtkm::Id x_2, vtkm::Id y_2, vtkm::Id x_3, vtkm::Id y_3, - vtkm::Id x_d, vtkm::Id y_d, + vtkm::Id x_d, vtkm::Id y_d, vtkm::Id x_4, vtkm::Id y_4, vtkm::Id x_5, vtkm::Id y_5, // actual size of matrix5 vtkm::Id start_x5, vtkm::Id start_y5,// start indices of pretend matrix bool mode ) - : - x1(x_1), y1(y_1), - xa(x_a), ya(y_a), - x2(x_2), y2(y_2), - x3(x_3), y3(y_3), - xd(x_d), yd(y_d), - x4(x_4), y4(y_4), - x5(x_5), y5(y_5), - startX5(start_x5), startY5(start_y5), - modeLR (mode) + : + x1(x_1), y1(y_1), + xa(x_a), ya(y_a), + x2(x_2), y2(y_2), + x3(x_3), y3(y_3), + xd(x_d), yd(y_d), + x4(x_4), y4(y_4), + x5(x_5), y5(y_5), + startX5(start_x5), startY5(start_y5), + modeLR (mode) { // Get pretend matrix dims if( modeLR ) @@ -1757,7 +1757,7 @@ public: { mat = 1; // ext1 idx = inY * x1 + inX; - } + } else if ( x1 <= inX && inX < (x1 + xa) ) { mat = 5; // cAcD @@ -1848,21 +1848,21 @@ private: class IndexTranslator3Matrices { public: - IndexTranslator3Matrices( vtkm::Id x_1, vtkm::Id y_1, + IndexTranslator3Matrices( vtkm::Id x_1, vtkm::Id y_1, vtkm::Id x_2, vtkm::Id y_2, // actual dims of mat2 vtkm::Id startx_2, vtkm::Id starty_2, // start idx of pretend - vtkm::Id pretendx_2, vtkm::Id pretendy_2,// pretend dims - vtkm::Id x_3, vtkm::Id y_3, - bool mode ) - : - dimX1(x_1), dimY1(y_1), + vtkm::Id pretendx_2, vtkm::Id pretendy_2,// pretend dims + vtkm::Id x_3, vtkm::Id y_3, + bool mode ) + : + dimX1(x_1), dimY1(y_1), dimX2(x_2), dimY2(y_2), startX2( startx_2 ), startY2( starty_2 ), pretendDimX2( pretendx_2 ), pretendDimY2( pretendy_2 ), - dimX3(x_3), dimY3(y_3), - mode_lr(mode) - { - (void)dimY2; + dimX3(x_3), dimY3(y_3), + mode_lr(mode) + { + (void)dimY2; } VTKM_EXEC_CONT @@ -1875,7 +1875,7 @@ public: { mat = 1; idx = inY * dimX1 + inX; - } + } else if ( dimX1 <= inX && inX < (dimX1 + pretendDimX2) ) { mat = 2; @@ -1883,7 +1883,7 @@ public: } else if ( (dimX1 + pretendDimX2) <= inX && inX < (dimX1 + pretendDimX2 + dimX3) ) { - mat = 3; + mat = 3; idx = inY * dimX3 + (inX - dimX1 - pretendDimX2); } else @@ -1936,23 +1936,23 @@ public: // Constructor VTKM_EXEC_CONT - ExtensionWorklet2D ( vtkm::Id extdimX, vtkm::Id extdimY, - vtkm::Id sigdimX, vtkm::Id sigdimY, + ExtensionWorklet2D ( vtkm::Id extdimX, vtkm::Id extdimY, + vtkm::Id sigdimX, vtkm::Id sigdimY, vtkm::Id sigstartX, vtkm::Id sigstartY, vtkm::Id sigpretendX, vtkm::Id sigpretendY, - DWTMode m, - ExtensionDirection dir, + DWTMode m, + ExtensionDirection dir, bool pad_zero) - : - extDimX( extdimX ), extDimY( extdimY ), - sigDimX( sigdimX ), sigDimY( sigdimY ), - sigStartX( sigstartX ), sigStartY( sigstartY ), - sigPretendDimX( sigpretendX ), sigPretendDimY( sigpretendY ), - mode( m ), - direction( dir ), - padZero( pad_zero ) - { - (void)sigDimY; + : + extDimX( extdimX ), extDimY( extdimY ), + sigDimX( sigdimX ), sigDimY( sigdimY ), + sigStartX( sigstartX ), sigStartY( sigstartY ), + sigPretendDimX( sigpretendX ), sigPretendDimY( sigpretendY ), + mode( m ), + direction( dir ), + padZero( pad_zero ) + { + (void)sigDimY; } // Index translation helper @@ -1984,14 +1984,14 @@ public: const vtkm::Id &workIndex) const { vtkm::Id extX, extY, sigPretendX, sigPretendY; - sigPretendX = sigPretendY = 0; + sigPretendX = sigPretendY = 0; Ext1Dto2D( workIndex, extX, extY ); typename PortalOutType::ValueType sym = 1.0; if( mode == ASYMH || mode == ASYMW ) { sym = -1.0; } - if( direction == LEFT ) + if( direction == LEFT ) { sigPretendY = extY; if( mode == SYMH || mode == ASYMH ) @@ -2000,10 +2000,10 @@ public: } else // mode == SYMW || mode == ASYMW { - sigPretendX = extDimX - extX; + sigPretendX = extDimX - extX; } } - else if( direction == TOP ) + else if( direction == TOP ) { sigPretendX = extX; if( mode == SYMH || mode == ASYMH ) @@ -2012,7 +2012,7 @@ public: } else // mode == SYMW || mode == ASYMW { - sigPretendY = extDimY - extY; + sigPretendY = extDimY - extY; } } else if( direction == RIGHT ) @@ -2047,7 +2047,7 @@ public: sigPretendY++; } } - else + else { vtkm::cont::ErrorInternal("Invalid extension mode for matrices!"); } @@ -2058,7 +2058,7 @@ public: } else { - portalOut.Set( workIndex, sym * + portalOut.Set( workIndex, sym * portalIn.Get( SigPretend2Dto1D(sigPretendX, sigPretendY) )); } } @@ -2090,35 +2090,35 @@ public: VTKM_EXEC_CONT ForwardTransform2D ( const vtkm::cont::ArrayHandle &loFilter, const vtkm::cont::ArrayHandle &hiFilter, - vtkm::Id filter_len, vtkm::Id approx_len, + vtkm::Id filter_len, vtkm::Id approx_len, bool odd_low, bool mode_lr, vtkm::Id x1, vtkm::Id y1, // dims of left/top extension vtkm::Id x2, vtkm::Id y2, // dims of signal vtkm::Id startx2, vtkm::Id starty2, // start idx of signal vtkm::Id pretendx2, vtkm::Id pretendy2, // pretend dims of signal vtkm::Id x3, vtkm::Id y3 ) // dims of right/bottom extension - : + : lowFilter( loFilter.PrepareForInput( DeviceTag() ) ), highFilter( hiFilter.PrepareForInput( DeviceTag() ) ), filterLen( filter_len ), approxLen( approx_len ), outDimX( pretendx2 ), outDimY( pretendy2 ), oddlow( odd_low ), modeLR( mode_lr ), - translator( x1, y1, - x2, y2, - startx2, starty2, - pretendx2, pretendy2, - x3, y3, + translator( x1, y1, + x2, y2, + startx2, starty2, + pretendx2, pretendy2, + x3, y3, mode_lr ) { this->SetStartPosition(); } VTKM_EXEC_CONT - void Output1Dto2D( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y ) const + void Output1Dto2D( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y ) const { x = idx % outDimX; y = idx / outDimX; } VTKM_EXEC_CONT - vtkm::Id Output2Dto1D( vtkm::Id x, vtkm::Id y ) const + vtkm::Id Output2Dto1D( vtkm::Id x, vtkm::Id y ) const { return y * outDimX + x; } @@ -2149,8 +2149,8 @@ public: return -1; } } - - template VTKM_EXEC_CONT void operator()(const InPortalType1 &inPortal1, // left/top extension @@ -2173,7 +2173,7 @@ public: for( vtkm::Id k = filterLen - 1; k > -1; k-- ) { translator.Translate2Dto1D( xl, workY, inputMatrix, inputIdx ); - sum += lowFilter.Get(k) * + sum += lowFilter.Get(k) * GetVal( inPortal1, inPortal2, inPortal3, inputMatrix, inputIdx ); xl++; } @@ -2187,7 +2187,7 @@ public: for( vtkm::Id k = filterLen - 1; k > -1; k-- ) { translator.Translate2Dto1D( xh, workY, inputMatrix, inputIdx ); - sum += highFilter.Get(k) * + sum += highFilter.Get(k) * GetVal( inPortal1, inPortal2, inPortal3, inputMatrix, inputIdx ); xh++; } @@ -2195,7 +2195,7 @@ public: coeffOut.Set( output1D, static_cast(sum) ); } } - else // top-down order + else // top-down order { if( workY % 2 == 0 ) // calculate cA { @@ -2204,7 +2204,7 @@ public: for( vtkm::Id k = filterLen - 1; k > -1; k-- ) { translator.Translate2Dto1D( workX, yl, inputMatrix, inputIdx ); - sum += lowFilter.Get(k) * + sum += lowFilter.Get(k) * GetVal( inPortal1, inPortal2, inPortal3, inputMatrix, inputIdx ); yl++; } @@ -2218,7 +2218,7 @@ public: for( vtkm::Id k = filterLen - 1; k > -1; k-- ) { translator.Translate2Dto1D( workX, yh, inputMatrix, inputIdx ); - sum += highFilter.Get(k) * + sum += highFilter.Get(k) * GetVal( inPortal1, inPortal2, inPortal3, inputMatrix, inputIdx ); yh++; } @@ -2239,7 +2239,7 @@ private: bool modeLR; // true = left right; false = top down. const IndexTranslator3Matrices translator; vtkm::Id lstart, hstart; - + VTKM_EXEC_CONT void SetStartPosition() { @@ -2257,12 +2257,12 @@ private: // | (x1) | (xa) | (x2) | (x3) | (xd) | (x4) | // | | | | | | | // ---------------------------------------------------- -// portal1: ext1 -// portal2: ext2 -// portal3: ext3 -// portal4: ext4 +// portal1: ext1 +// portal2: ext2 +// portal3: ext3 +// portal4: ext4 // portal5: cA + cD -// Worklet: perform a simple 2D inverse transform +// Worklet: perform a simple 2D inverse transform template< typename DeviceTag > class InverseTransform2D: public vtkm::worklet::WorkletMapField { @@ -2280,9 +2280,9 @@ public: VTKM_EXEC_CONT InverseTransform2D( const vtkm::cont::ArrayHandle &lo_fil, const vtkm::cont::ArrayHandle &hi_fil, - vtkm::Id fil_len, - vtkm::Id x_1, vtkm::Id y_1, // ext1 - vtkm::Id x_a, vtkm::Id y_a, // cA + vtkm::Id fil_len, + vtkm::Id x_1, vtkm::Id y_1, // ext1 + vtkm::Id x_a, vtkm::Id y_a, // cA vtkm::Id x_2, vtkm::Id y_2, // ext2 vtkm::Id x_3, vtkm::Id y_3, // ext3 vtkm::Id x_d, vtkm::Id y_d, // cD @@ -2290,14 +2290,14 @@ public: vtkm::Id x_5, vtkm::Id y_5, vtkm::Id startX5, vtkm::Id startY5, bool mode_lr ) - : + : lowFilter( lo_fil.PrepareForInput( DeviceTag() ) ), highFilter( hi_fil.PrepareForInput( DeviceTag() ) ), - filterLen( fil_len ), + filterLen( fil_len ), translator(x_1, y_1, x_a, y_a, x_2, y_2, - x_3, y_3, x_d, y_d, x_4, y_4, + x_3, y_3, x_d, y_d, x_4, y_4, x_5, y_5, startX5, startY5, mode_lr ), - modeLR( mode_lr ) + modeLR( mode_lr ) { if( modeLR ) { @@ -2312,25 +2312,25 @@ public: cALenExtended = y_1 + y_a + y_2; } } - + VTKM_EXEC_CONT void Output1Dto2D( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y ) const { x = idx % outputDimX; y = idx / outputDimX; } - + // Use 64-bit float for convolution calculation #define VAL vtkm::Float64 #define MAKEVAL(a) (static_cast(a)) template VTKM_EXEC_CONT - VAL GetVal( const InPortalType1 &ext1, + VAL GetVal( const InPortalType1 &ext1, const InPortalType2 &ext2, - const InPortalType3 &ext3, + const InPortalType3 &ext3, const InPortalType4 &ext4, - const InPortalTypecAcD &cAcD, + const InPortalTypecAcD &cAcD, vtkm::Id inMatrix, vtkm::Id inIdx ) const { if( inMatrix == 1 ) @@ -2373,7 +2373,7 @@ public: const vtkm::Id &workIdx ) const { vtkm::Id workX, workY; - vtkm::Id k1, k2, xi, yi, inputMatrix, inputIdx; + vtkm::Id k1, k2, xi, yi, inputMatrix, inputIdx; Output1Dto2D( workIdx, workX, workY ); // left-right, odd filter @@ -2381,12 +2381,12 @@ public: { if( workX % 2 != 0 ) { - k1 = filterLen - 2; + k1 = filterLen - 2; k2 = filterLen - 1; } else { - k1 = filterLen - 1; + k1 = filterLen - 1; k2 = filterLen - 2; } @@ -2395,9 +2395,9 @@ public: while( k1 > -1 ) { translator.Translate2Dto1D( xi, workY, inputMatrix, inputIdx ); - sum += lowFilter.Get(k1) * GetVal( portal1, portal2, portal3, portal4, + sum += lowFilter.Get(k1) * GetVal( portal1, portal2, portal3, portal4, portalcAcD, inputMatrix, inputIdx ); - xi++; + xi++; k1 -= 2; } xi = workX / 2; @@ -2406,23 +2406,23 @@ public: translator.Translate2Dto1D( xi + cALenExtended, workY, inputMatrix, inputIdx ); sum += highFilter.Get(k2) * GetVal( portal1, portal2, portal3, portal4, portalcAcD, inputMatrix, inputIdx ); - xi++; + xi++; k2 -= 2; } coeffOut = static_cast< OutputValueType> (sum); } // top-down, odd filter - else if ( !modeLR && (filterLen % 2 != 0) ) + else if ( !modeLR && (filterLen % 2 != 0) ) { if( workY % 2 != 0 ) { - k1 = filterLen - 2; + k1 = filterLen - 2; k2 = filterLen - 1; } else { - k1 = filterLen - 1; + k1 = filterLen - 1; k2 = filterLen - 2; } @@ -2480,10 +2480,10 @@ public: while( k1 > -1 ) { translator.Translate2Dto1D( xi, workY, inputMatrix, inputIdx ); - cA = GetVal( portal1, portal2, portal3, portal4, portalcAcD, + cA = GetVal( portal1, portal2, portal3, portal4, portalcAcD, inputMatrix, inputIdx ); translator.Translate2Dto1D( xi + cALenExtended, workY, inputMatrix, inputIdx ); - cD = GetVal( portal1, portal2, portal3, portal4, portalcAcD, + cD = GetVal( portal1, portal2, portal3, portal4, portalcAcD, inputMatrix, inputIdx ); sum += lowFilter.Get(k1) * cA + highFilter.Get(k1) * cD; xi++; @@ -2491,7 +2491,7 @@ public: } coeffOut = static_cast< OutputValueType >(sum); } - + // top-down, even filter else { @@ -2524,7 +2524,7 @@ public: while( k1 > -1 ) { translator.Translate2Dto1D( workX, yi, inputMatrix, inputIdx ); - cA = GetVal( portal1, portal2, portal3, portal4, portalcAcD, + cA = GetVal( portal1, portal2, portal3, portal4, portalcAcD, inputMatrix, inputIdx ); translator.Translate2Dto1D( workX, yi + cALenExtended, inputMatrix, inputIdx ); cD = GetVal( portal1, portal2, portal3, portal4, portalcAcD, @@ -2566,17 +2566,17 @@ public: ForwardTransform( const vtkm::cont::ArrayHandle &loFilter, const vtkm::cont::ArrayHandle &hiFilter, vtkm::Id filLen, vtkm::Id approx_len, vtkm::Id detail_len, - bool odd_low, bool odd_high ) + bool odd_low, bool odd_high ) : - lowFilter( loFilter.PrepareForInput(DeviceTag()) ), - highFilter( hiFilter.PrepareForInput(DeviceTag()) ), - filterLen( filLen ), - approxLen( approx_len ), + lowFilter( loFilter.PrepareForInput(DeviceTag()) ), + highFilter( hiFilter.PrepareForInput(DeviceTag()) ), + filterLen( filLen ), + approxLen( approx_len ), detailLen( detail_len ), oddlow ( odd_low ), oddhigh ( odd_high ) - { - this->SetStartPosition(); + { + this->SetStartPosition(); } // Use 64-bit float for convolution calculation @@ -2584,7 +2584,7 @@ public: #define MAKEVAL(a) (static_cast(a)) template VTKM_EXEC - void operator()(const InputPortalType &signalIn, + void operator()(const InputPortalType &signalIn, OutputPortalType &coeffOut, const vtkm::Id &workIndex) const { @@ -2599,7 +2599,7 @@ public: { sum += lowFilter.Get(k) * MAKEVAL( signalIn.Get(xl++) ); } - vtkm::Id outputIdx = workIndex / 2; // put cA at the beginning + vtkm::Id outputIdx = workIndex / 2; // put cA at the beginning coeffOut.Set( outputIdx, static_cast(sum) ); } else // calculate cD @@ -2624,7 +2624,7 @@ private: const vtkm::Id filterLen, approxLen, detailLen; // filter and outcome coeff length. bool oddlow, oddhigh; vtkm::Id xlstart, xhstart; - + VTKM_EXEC_CONT void SetStartPosition() { @@ -2651,12 +2651,12 @@ public: InverseTransformOdd( const vtkm::cont::ArrayHandle &loFilter, const vtkm::cont::ArrayHandle &hiFilter, vtkm::Id filLen, vtkm::Id ca_len, vtkm::Id ext_len ) - : + : lowFilter( loFilter.PrepareForInput(DeviceTag()) ), highFilter( hiFilter.PrepareForInput(DeviceTag()) ), filterLen( filLen ), cALen( ca_len ), cALen2( ca_len * 2 ), cALenExtended( ext_len ) {} - + // Use 64-bit float for convolution calculation #define VAL vtkm::Float64 #define MAKEVAL(a) (static_cast(a)) @@ -2670,7 +2670,7 @@ public: { vtkm::Id xi; // coeff indices vtkm::Id k1, k2; // indices for low and high filter - VAL sum = 0.0; + VAL sum = 0.0; if( workIndex % 2 != 0 ) { @@ -2696,7 +2696,7 @@ public: sum += highFilter.Get(k2) * MAKEVAL( coeffs.Get( this->cALenExtended + xi++ ) ); k2 -= 2; } - + sigOut.Set(workIndex, static_cast( sum ) ); } @@ -2708,7 +2708,7 @@ private: const typename vtkm::cont::ArrayHandle::ExecutionTypes:: PortalConst lowFilter, highFilter; const vtkm::Id filterLen; // filter length. - const vtkm::Id cALen; // Number of actual cAs + const vtkm::Id cALen; // Number of actual cAs const vtkm::Id cALen2; // = cALen * 2 const vtkm::Id cALenExtended; // Number of cA at the beginning of input, followed by cD }; @@ -2731,7 +2731,7 @@ public: InverseTransformEven( const vtkm::cont::ArrayHandle &loFilter, const vtkm::cont::ArrayHandle &hiFilter, vtkm::Id filtL, vtkm::Id cAL, vtkm::Id cALExt, bool m ) - : + : lowFilter( loFilter.PrepareForInput(DeviceTag()) ), highFilter( hiFilter.PrepareForInput(DeviceTag()) ), filterLen( filtL ), cALen( cAL ), cALen2( cAL * 2 ), @@ -2750,7 +2750,7 @@ public: { vtkm::Id xi; // coeff indices vtkm::Id k; // indices for low and high filter - VAL sum = 0.0; + VAL sum = 0.0; if( matlab || (filterLen/2) % 2 != 0 ) // odd length half filter { @@ -2795,12 +2795,12 @@ private: const typename vtkm::cont::ArrayHandle::ExecutionTypes:: PortalConst lowFilter, highFilter; const vtkm::Id filterLen; // filter length. - const vtkm::Id cALen; // Number of actual cAs + const vtkm::Id cALen; // Number of actual cAs const vtkm::Id cALen2; // = cALen * 2 - const vtkm::Id cALenExtended; // Number of cA at the beginning of input, followed by cD - bool matlab; // followed the naming convention from VAPOR + const vtkm::Id cALenExtended; // Number of cA at the beginning of input, followed by cD + bool matlab; // followed the naming convention from VAPOR // It's always false for the 1st 4 filters. -}; +}; @@ -2814,7 +2814,7 @@ public: // Constructor ThresholdWorklet( vtkm::Float64 t ) : threshold( t ), // must pass in a positive val neg_threshold( t*-1.0 ) {} - + template VTKM_EXEC void operator()( ValueType &coeffVal ) const @@ -2826,24 +2826,24 @@ public: } private: - vtkm::Float64 threshold; // positive - vtkm::Float64 neg_threshold; // negative -}; + vtkm::Float64 threshold; // positive + vtkm::Float64 neg_threshold; // negative +}; class SquaredDeviation: public vtkm::worklet::WorkletMapField { public: - typedef void ControlSignature(FieldIn, - FieldOut); + typedef void ControlSignature(FieldIn, + FieldOut); typedef _2 ExecutionSignature( _1 ); typedef _1 InputDomain; // Constructor template VTKM_EXEC_CONT - SquaredDeviation( ValueType t ) + SquaredDeviation( ValueType t ) { this->mean = static_cast(t); } @@ -2859,16 +2859,16 @@ public: private: vtkm::Float64 mean; -}; +}; class Differencer: public vtkm::worklet::WorkletMapField { public: - typedef void ControlSignature(FieldIn, + typedef void ControlSignature(FieldIn, FieldIn, - FieldOut); + FieldOut); typedef _3 ExecutionSignature( _1, _2 ); typedef _1 InputDomain; @@ -2878,15 +2878,15 @@ public: { return v1 - static_cast(v2); } -}; +}; class SquareWorklet : public vtkm::worklet::WorkletMapField { public: - typedef void ControlSignature(FieldIn< ScalarAll>, - FieldOut); + typedef void ControlSignature(FieldIn< ScalarAll>, + FieldOut); typedef _2 ExecutionSignature( _1 ); typedef _1 InputDomain; @@ -2896,7 +2896,7 @@ public: { return (v * v); } -}; +}; @@ -2910,7 +2910,7 @@ public: // Constructor VTKM_EXEC_CONT - CopyWorklet( vtkm::Id idx ) + CopyWorklet( vtkm::Id idx ) { this->startIdx = idx; } @@ -3154,7 +3154,7 @@ private: -// Assign zero to a single index +// Assign zero to a single index class AssignZeroWorklet : public vtkm::worklet::WorkletMapField { public: @@ -3193,9 +3193,9 @@ public: // Constructor VTKM_EXEC_CONT AssignZero2DWorklet( vtkm::Id x, vtkm::Id y, vtkm::Id zero_x, vtkm::Id zero_y ) - : dimX( x ), dimY( y ), zeroX( zero_x ), zeroY( zero_y ) - { - (void)dimY; + : dimX( x ), dimY( y ), zeroX( zero_x ), zeroY( zero_y ) + { + (void)dimY; } // Index translation helper @@ -3245,7 +3245,7 @@ public: vtkm::Id zero_x, vtkm::Id zero_y, vtkm::Id zero_z ) : dimX( x ), dimY( y ), dimZ( z ), zeroX( zero_x ), zeroY( zero_y ), zeroZ( zero_z ) - { + { (void)dimZ; } @@ -3297,30 +3297,30 @@ public: // Constructor VTKM_EXEC_CONT - RectangleCopyTo( vtkm::Id inx, vtkm::Id iny, + RectangleCopyTo( vtkm::Id inx, vtkm::Id iny, vtkm::Id outx, vtkm::Id outy, vtkm::Id xStart, vtkm::Id yStart ) : inXLen (inx), inYLen ( iny ), outXLen (outx), outYLen ( outy ), outXStart(xStart), outYStart( yStart ) - { + { (void)outYLen; (void)inYLen; } VTKM_EXEC_CONT - void GetLogicalDimOfInputRect( const vtkm::Id &idx, - vtkm::Id &x, - vtkm::Id &y ) const + void GetLogicalDimOfInputRect( const vtkm::Id &idx, + vtkm::Id &x, + vtkm::Id &y ) const { x = idx % inXLen; y = idx / inXLen; } VTKM_EXEC_CONT - vtkm::Id Get1DIdxOfOutputRect( vtkm::Id x, - vtkm::Id y ) const + vtkm::Id Get1DIdxOfOutputRect( vtkm::Id x, + vtkm::Id y ) const { return y * outXLen + x; } @@ -3355,21 +3355,21 @@ public: // Constructor VTKM_EXEC_CONT - CubeCopyTo( vtkm::Id inx, vtkm::Id iny, vtkm::Id inz, + CubeCopyTo( vtkm::Id inx, vtkm::Id iny, vtkm::Id inz, vtkm::Id outx, vtkm::Id outy, vtkm::Id outz, vtkm::Id xStart, vtkm::Id yStart, vtkm::Id zStart ) : inDimX( inx ), inDimY( iny ), inDimZ( inz ), outDimX( outx ), outDimY( outy ), outDimZ( outz ), - outStartX( xStart), outStartY( yStart ), outStartZ( zStart ) - { + outStartX( xStart), outStartY( yStart ), outStartZ( zStart ) + { (void)outDimZ; - (void)inDimZ; + (void)inDimZ; } VTKM_EXEC_CONT - void GetLogicalDimOfInputCube( vtkm::Id idx, - vtkm::Id &x, vtkm::Id &y, vtkm::Id &z ) const + void GetLogicalDimOfInputCube( vtkm::Id idx, + vtkm::Id &x, vtkm::Id &y, vtkm::Id &z ) const { z = idx / (inDimX * inDimY); y = (idx - z * inDimX * inDimY) / inDimX; @@ -3377,7 +3377,7 @@ public: } VTKM_EXEC_CONT - vtkm::Id Get1DIdxOfOutputCube( vtkm::Id x, vtkm::Id y, vtkm::Id z ) const + vtkm::Id Get1DIdxOfOutputCube( vtkm::Id x, vtkm::Id y, vtkm::Id z ) const { return z * outDimX * outDimY + y * outDimX + x; }