mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-21 11:35:43 +00:00
IDWT test correct now
This commit is contained in:
parent
a8d47c4bf1
commit
3ea8ad6d5b
@ -275,11 +275,11 @@ public:
|
||||
vtkm::Id cDPadLen = 0;
|
||||
if( doSymConv ) // extend cA and cD
|
||||
{
|
||||
addLen = filterLen / 2;
|
||||
addLen = filterLen / 4;
|
||||
if( (L[0] > L[1]) && (this->wmode == SYMH) )
|
||||
cDPadLen = L[0];
|
||||
cATempLen = L[0] + 2 * addLen;
|
||||
cDTempLen = cATempLen; // even length signal here
|
||||
cDTempLen = cATempLen; // same length
|
||||
}
|
||||
else // not extend cA and cD
|
||||
{
|
||||
@ -308,14 +308,20 @@ public:
|
||||
|
||||
ArrayConcat2 cATemp, cDTemp;
|
||||
|
||||
/*this->Extend1D( sigIn, sigInExtended, addLen, this->wmode, this->wmode ); */
|
||||
|
||||
if( doSymConv ) // Actually extend cA and cD
|
||||
{
|
||||
#if 0
|
||||
std::cout << "cALeftMode = " << cALeftMode << std::endl;
|
||||
std::cout << "cARightMode = " << cARightMode << std::endl;
|
||||
std::cout << "cDLeftMode = " << cDLeftMode << std::endl;
|
||||
std::cout << "cDRightMode = " << cDRightMode << std::endl;
|
||||
#endif
|
||||
{ // make a CoeffArrayType to send into Extend1D
|
||||
CoeffArrayType cABasic;
|
||||
vtkm::cont::DeviceAdapterAlgorithm< VTKM_DEFAULT_DEVICE_ADAPTER_TAG >::Copy
|
||||
(cA, cABasic);
|
||||
|
||||
this->Extend1D( cABasic, cATemp, addLen, cALeftMode, cARightMode );
|
||||
}
|
||||
if( cDPadLen > 0 )
|
||||
@ -331,29 +337,47 @@ public:
|
||||
CoeffArrayType cDBasic;
|
||||
vtkm::cont::DeviceAdapterAlgorithm< VTKM_DEFAULT_DEVICE_ADAPTER_TAG >::Copy
|
||||
( cDPad, cDBasic );
|
||||
|
||||
this->Extend1D( cDBasic, cDTemp, addLen, cDLeftMode, cDRightMode );
|
||||
}
|
||||
else
|
||||
{
|
||||
CoeffArrayType cDBasic;
|
||||
vtkm::cont::DeviceAdapterAlgorithm< VTKM_DEFAULT_DEVICE_ADAPTER_TAG >::Copy
|
||||
( cD, cDBasic );
|
||||
this->Extend1D( cDBasic, cDTemp, addLen, cDLeftMode, cDRightMode );
|
||||
{
|
||||
CoeffArrayType cDBasic;
|
||||
vtkm::cont::DeviceAdapterAlgorithm< VTKM_DEFAULT_DEVICE_ADAPTER_TAG >::Copy
|
||||
( cD, cDBasic );
|
||||
|
||||
this->Extend1D( cDBasic, cDTemp, addLen, cDLeftMode, cDRightMode );
|
||||
}
|
||||
// Attached an zero if cDTemp is shorter than cDTempLen
|
||||
if( cDTemp.GetNumberOfValues() != cDTempLen )
|
||||
{
|
||||
VTKM_ASSERT( cDTemp.GetNumberOfValues() == cDTempLen - 1 );
|
||||
CoeffArrayType cDBasic;
|
||||
vtkm::cont::DeviceAdapterAlgorithm< VTKM_DEFAULT_DEVICE_ADAPTER_TAG >::Copy
|
||||
( cDTemp, cDBasic );
|
||||
ExtensionArrayType emptyArray;
|
||||
ExtensionArrayType singleValArray;
|
||||
singleValArray.Allocate(1);
|
||||
singleValArray.GetPortalControl().Set(0, 0.0);
|
||||
ArrayConcat concat1( emptyArray, cDBasic );
|
||||
cDTemp = vtkm::cont::make_ArrayHandleConcatenate( concat1, singleValArray );
|
||||
}
|
||||
}
|
||||
} // end if( doSymConv )
|
||||
else // Make cATemp and cDTemp from cA and cD
|
||||
{
|
||||
ExtensionArrayType zeroLenArray;
|
||||
// make correct ArrayHandle for cATemp
|
||||
{
|
||||
// make correct ArrayHandle for cATemp
|
||||
CoeffArrayType cABasic;
|
||||
vtkm::cont::DeviceAdapterAlgorithm< VTKM_DEFAULT_DEVICE_ADAPTER_TAG >::Copy
|
||||
(cA, cABasic);
|
||||
ArrayConcat leftOn( zeroLenArray, cABasic );
|
||||
cATemp = vtkm::cont::make_ArrayHandleConcatenate( leftOn, zeroLenArray );
|
||||
}
|
||||
// make correct ArrayHandle for cDTemp
|
||||
{
|
||||
// make correct ArrayHandle for cDTemp
|
||||
CoeffArrayType cDBasic;
|
||||
vtkm::cont::DeviceAdapterAlgorithm< VTKM_DEFAULT_DEVICE_ADAPTER_TAG >::Copy
|
||||
(cD, cDBasic);
|
||||
@ -368,18 +392,19 @@ public:
|
||||
vtkm::cont::ArrayHandleConcatenate< ArrayConcat2, ArrayConcat2>
|
||||
coeffInExtended( cATemp, cDTemp );
|
||||
|
||||
#if 1
|
||||
std::cerr << "cATemp has length: " << cATemp.GetNumberOfValues() << std::endl;
|
||||
for( vtkm::Id i = 0; i < cATemp.GetNumberOfValues(); i++ )
|
||||
std::cout << cATemp.GetPortalConstControl().Get(i) << std::endl;
|
||||
std::cerr << "cDTemp has length: " << cDTemp.GetNumberOfValues() << std::endl;
|
||||
for( vtkm::Id i = 0; i < cATemp.GetNumberOfValues(); i++ )
|
||||
std::cout << cATemp.GetPortalConstControl().Get(i) << std::endl;
|
||||
std::cerr << "coeffIn has length: " << coeffInExtended.GetNumberOfValues() << std::endl;
|
||||
for( vtkm::Id i = 0; i < cDTemp.GetNumberOfValues(); i++ )
|
||||
std::cout << cDTemp.GetPortalConstControl().Get(i) << std::endl;
|
||||
#endif
|
||||
|
||||
// Initialize a worklet
|
||||
vtkm::worklet::InverseTransformOdd inverseXformOdd;
|
||||
inverseXformOdd.SetFilterLength( filterLen );
|
||||
inverseXformOdd.SetCALength( L[0] );
|
||||
inverseXformOdd.SetCALength( L[0], cATempLen );
|
||||
vtkm::worklet::DispatcherMapField< vtkm::worklet::InverseTransformOdd >
|
||||
dispatcher( inverseXformOdd );
|
||||
dispatcher.Invoke( coeffInExtended,
|
||||
@ -387,7 +412,7 @@ public:
|
||||
this->filter->GetHighReconstructFilter(),
|
||||
sigOut );
|
||||
|
||||
// need to take out the first L[2] values to put into sigOut
|
||||
sigOut.Shrink( L[2] );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -71,7 +71,7 @@ void TestDWTIDWT1D()
|
||||
// make input data array handle
|
||||
std::vector<vtkm::Float64> tmpVector;
|
||||
for( vtkm::Id i = 0; i < sigLen; i++ )
|
||||
tmpVector.push_back( static_cast<vtkm::Float64>(i%100+1) );
|
||||
tmpVector.push_back( static_cast<vtkm::Float64>( i ) );
|
||||
vtkm::cont::ArrayHandle<vtkm::Float64> inputArray =
|
||||
vtkm::cont::make_ArrayHandle(tmpVector);
|
||||
|
||||
|
@ -163,9 +163,10 @@ public:
|
||||
|
||||
// Set cA length
|
||||
VTKM_CONT_EXPORT
|
||||
void SetCALength( vtkm::Id len )
|
||||
void SetCALength( vtkm::Id len, vtkm::Id lenExt )
|
||||
{
|
||||
this->cALen = len;
|
||||
this->cALenExtended = lenExt;
|
||||
}
|
||||
|
||||
// Use 64-bit float for convolution calculation
|
||||
@ -186,28 +187,32 @@ public:
|
||||
vtkm::Id k; // filter indices
|
||||
|
||||
VAL sum = 0.0;
|
||||
xi = (workIndex+1) / 2;
|
||||
if( workIndex % 2 != 0 )
|
||||
k = this->filterLen - 2;
|
||||
else
|
||||
k = this->filterLen - 1;
|
||||
while( k >= 0 )
|
||||
{
|
||||
sum += lowFilter.Get(k) * MAKEVAL( coeffs.Get(xi) );
|
||||
xi++;
|
||||
k -= 2;
|
||||
}
|
||||
|
||||
xi = workIndex / 2;
|
||||
if( workIndex % 2 != 0 )
|
||||
k = this->filterLen - 1;
|
||||
else
|
||||
k = this->filterLen - 2;
|
||||
while( k >= 0 )
|
||||
if( workIndex < 2*cALen ) // valid calculation region
|
||||
{
|
||||
sum += highFilter.Get(k) * MAKEVAL( coeffs.Get( xi + this->cALen ) );
|
||||
xi++;
|
||||
k -= 2;
|
||||
xi = (workIndex+1) / 2;
|
||||
if( workIndex % 2 != 0 )
|
||||
k = this->filterLen - 2;
|
||||
else
|
||||
k = this->filterLen - 1;
|
||||
while( k >= 0 )
|
||||
{
|
||||
sum += lowFilter.Get(k) * MAKEVAL( coeffs.Get(xi) );
|
||||
xi++;
|
||||
k -= 2;
|
||||
}
|
||||
|
||||
xi = workIndex / 2;
|
||||
if( workIndex % 2 != 0 )
|
||||
k = this->filterLen - 1;
|
||||
else
|
||||
k = this->filterLen - 2;
|
||||
while( k >= 0 )
|
||||
{
|
||||
sum += highFilter.Get(k) * MAKEVAL( coeffs.Get( xi + this->cALenExtended ) );
|
||||
xi++;
|
||||
k -= 2;
|
||||
}
|
||||
}
|
||||
|
||||
sigOut = static_cast<OutputSignalType>( sum );
|
||||
@ -218,8 +223,9 @@ public:
|
||||
|
||||
private:
|
||||
vtkm::Float64 magicNum;
|
||||
vtkm::Id filterLen; // filter length.
|
||||
vtkm::Id cALen; // Number of cA at the beginning of input array
|
||||
vtkm::Id filterLen; // filter length.
|
||||
vtkm::Id cALen; // Number of actual cAs
|
||||
vtkm::Id cALenExtended; // Number of extended cA at the beginning of input array
|
||||
|
||||
}; // Finish class ForwardTransform
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user