successfully test the Extend1D function to return a regular array handle

This commit is contained in:
Samuel Li 2016-07-25 01:08:19 -06:00
parent acc0b694ce
commit c54ad2fd13
4 changed files with 46 additions and 16 deletions

@ -104,6 +104,7 @@ WaveletCompressor::WaveDecompose( const SignalArrayType &sigIn, // Input
#undef VAL #undef VAL
delete[] L; delete[] L;
return 0; return 0;
} }

@ -165,7 +165,6 @@ protected:
void WaveLengthValidate( vtkm::Id sigInLen, vtkm::Id filterLength, vtkm::Id &level) void WaveLengthValidate( vtkm::Id sigInLen, vtkm::Id filterLength, vtkm::Id &level)
{ {
// *lev = (int) (log((double) sigInLen / (double) (waveLength)) / log(2.0)) + 1;
if( sigInLen < filterLength ) if( sigInLen < filterLength )
level = 0; level = 0;
else else

@ -48,7 +48,8 @@ public:
// Func: Extend 1D signal // Func: Extend 1D signal
template< typename SigInArrayType, typename SigExtendedArrayType > template< typename SigInArrayType, typename SigExtendedArrayType >
vtkm::Id Extend1D( const SigInArrayType &sigIn, // Input VTKM_EXEC_CONT_EXPORT
vtkm::Id Extend1DConcat( const SigInArrayType &sigIn, // Input
SigExtendedArrayType &sigOut, // Output SigExtendedArrayType &sigOut, // Output
vtkm::Id addLen, vtkm::Id addLen,
vtkm::filter::internal::DWTMode leftExtMethod, vtkm::filter::internal::DWTMode leftExtMethod,
@ -121,12 +122,38 @@ public:
return 0; return 0;
} }
// Func: Extend 1D signal
template< typename ArrayType >
VTKM_EXEC_CONT_EXPORT
vtkm::Id Extend1D( const ArrayType &sigIn, // Input
ArrayType &sigOut, // Output
vtkm::Id addLen,
vtkm::filter::internal::DWTMode leftExtMethod,
vtkm::filter::internal::DWTMode rightExtMethod )
{
typedef typename ArrayType::ValueType ValueType;
typedef vtkm::cont::ArrayHandle< ValueType > ExtensionArrayType;
typedef vtkm::cont::ArrayHandleConcatenate< ExtensionArrayType, ArrayType>
ArrayConcat;
typedef vtkm::cont::ArrayHandleConcatenate< ArrayConcat, ExtensionArrayType>
ArrayConcat2;
ArrayConcat2 sigOutTmp;
Extend1DConcat( sigIn, sigOutTmp, addLen, leftExtMethod, rightExtMethod );
vtkm::cont::DeviceAdapterAlgorithm< VTKM_DEFAULT_DEVICE_ADAPTER_TAG>::Copy(
sigOutTmp, sigOut );
return 0;
}
// Func: // Func:
// Performs one level of 1D discrete wavelet transform // Performs one level of 1D discrete wavelet transform
// It takes care of boundary conditions, etc. // It takes care of boundary conditions, etc.
template< typename SignalArrayType, typename CoeffArrayType> template< typename SignalArrayType, typename CoeffArrayType>
VTKM_EXEC_CONT_EXPORT
vtkm::Id DWT1D( const SignalArrayType &sigIn, // Input vtkm::Id DWT1D( const SignalArrayType &sigIn, // Input
CoeffArrayType &coeffOut, // Output: cA followed by cD CoeffArrayType &coeffOut, // Output: cA followed by cD
vtkm::Id L[3] ) // Output: how many cA and cD. vtkm::Id L[3] ) // Output: how many cA and cD.
@ -221,6 +248,7 @@ public:
} }
// Func: // Func:
// Performs one level of inverse wavelet transform // Performs one level of inverse wavelet transform
// It takes care of boundary conditions, etc. // It takes care of boundary conditions, etc.
@ -316,7 +344,7 @@ public:
vtkm::cont::DeviceAdapterAlgorithm< VTKM_DEFAULT_DEVICE_ADAPTER_TAG >::Copy vtkm::cont::DeviceAdapterAlgorithm< VTKM_DEFAULT_DEVICE_ADAPTER_TAG >::Copy
(cA, cABasic); (cA, cABasic);
this->Extend1D( cABasic, cATemp, addLen, cALeftMode, cARightMode ); this->Extend1DConcat( cABasic, cATemp, addLen, cALeftMode, cARightMode );
} }
if( cDPadLen > 0 ) if( cDPadLen > 0 )
{ {
@ -332,7 +360,7 @@ public:
vtkm::cont::DeviceAdapterAlgorithm< VTKM_DEFAULT_DEVICE_ADAPTER_TAG >::Copy vtkm::cont::DeviceAdapterAlgorithm< VTKM_DEFAULT_DEVICE_ADAPTER_TAG >::Copy
( cDPad, cDBasic ); ( cDPad, cDBasic );
this->Extend1D( cDBasic, cDTemp, addLen, cDLeftMode, cDRightMode ); this->Extend1DConcat( cDBasic, cDTemp, addLen, cDLeftMode, cDRightMode );
} }
else else
{ {

@ -31,22 +31,24 @@
void TestExtend1D() void TestExtend1D()
{ {
// make input data array handle // make input data array handle
vtkm::Id sigLen = 20;
std::vector<vtkm::Float64> tmpVector;
for( vtkm::Id i = 0; i < sigLen; i++ )
tmpVector.push_back( static_cast<vtkm::Float64>(i) );
vtkm::cont::ArrayHandle<vtkm::Float64> inputArray =
vtkm::cont::make_ArrayHandle(tmpVector);
vtkm::filter::internal::WaveletDWT w("CDF9/7");
typedef vtkm::Float64 T; typedef vtkm::Float64 T;
typedef vtkm::cont::ArrayHandle<T> ArrayType; typedef vtkm::cont::ArrayHandle<T> ArrayType;
vtkm::Id sigLen = 20;
std::vector<T> tmpVector;
for( vtkm::Id i = 0; i < sigLen; i++ )
tmpVector.push_back( static_cast<T>(i) );
vtkm::cont::ArrayHandle<T> inputArray =
vtkm::cont::make_ArrayHandle(tmpVector);
ArrayType outputArray;
vtkm::filter::internal::WaveletDWT w("CDF9/7");
/*
typedef vtkm::cont::ArrayHandleConcatenate< ArrayType, ArrayType> typedef vtkm::cont::ArrayHandleConcatenate< ArrayType, ArrayType>
ArrayConcat; ArrayConcat;
typedef vtkm::cont::ArrayHandleConcatenate< ArrayConcat, ArrayType > ArrayConcat2; typedef vtkm::cont::ArrayHandleConcatenate< ArrayConcat, ArrayType > ArrayConcat2;
ArrayConcat2 outputArray; ArrayConcat2 outputArray;
*/
w.Extend1D( inputArray, outputArray, 4, w.Extend1D( inputArray, outputArray, 4,
vtkm::filter::internal::SYMW, vtkm::filter::internal::SYMW ); vtkm::filter::internal::SYMW, vtkm::filter::internal::SYMW );
@ -143,9 +145,9 @@ void TestWaveDecompose()
void TestWaveletCompressor() void TestWaveletCompressor()
{ {
std::cout << "Welcome to WaveletCompressorFilter test program :) " << std::endl; std::cout << "Welcome to WaveletCompressorFilter test program :) " << std::endl;
//TestExtend1D(); TestExtend1D();
//TestDWTIDWT1D(); //TestDWTIDWT1D();
TestWaveDecompose(); //TestWaveDecompose();
} }
int UnitTestWaveletCompressorFilter(int, char *[]) int UnitTestWaveletCompressorFilter(int, char *[])