On Friday, December 2, 2016 at 1:36:47 PM UTC-7, Helder wrote:
> On Friday, December 2, 2016 at 7:38:03 PM UTC+1, Jeff B wrote:
>> On Friday, December 2, 2016 at 8:03:27 AM UTC-6, Helder wrote:
>>> Hi,
>>> I came across this bug and it's a "heavy" one, meaning that IDL crashes and you're thrown back out.
>>>
>>> The crashing commands are (try at own risk!):
>>> sm = smooth(indgen(512,511), 9, /edge_mirror)
>>> sm = smooth(indgen(512,510), 9, /edge_mirror)
>>>
>>> And just to be pedantic, I've tested a few other cases and these did NOT result in a crash:
>>> sm = smooth(indgen(512,512), 9, /edge_mirror)
>>> sm = smooth(indgen(511,511), 9, /edge_mirror)
>>>
>>> It appears that smooth (stopped?) being able to smooth rectangular arrays.
>>>
>>> By running the above from the command line I get the following error (for a couple of seconds on the command line terminal):
>>> % Array has a corrupted descriptor: <no name>
>>> % Execution halted at: $Main$
>>>
>>> And my IDL version.
>>> IDL> !version
>>> {
>>> "ARCH": "x86_64",
>>> "OS": "Win32",
>>> "OS_FAMILY": "Windows",
>>> "OS_NAME": "Microsoft Windows",
>>> "RELEASE": "8.5.1",
>>> "BUILD_DATE": "Nov 14 2015",
>>> "MEMORY_BITS": 64,
>>> "FILE_OFFSET_BITS": 64
>>> }
>>>
>>> I others are brave enough, could you let me know if it crashes on other versions of IDL? Edge_mirror and _wrap have been added only in 8.1.
>>>
>>> Cheers,
>>> Helder
>>
>> It failed for me too. However, I was able to work around it by doing the following:
>>
>> IDL> arr = indgen(512,511)
>> IDL> sm1 = smooth(arr, [9,1], /edge_mirror)
>> IDL> sm2 = smooth(sm1, [1,9], /edge_mirror)
>>
>> Interestingly, this only failed for me when using integer types. For example, when using floats it worked fine:
>>
>> IDL> arrFloat = float(arr)
>> IDL> smFloat = smooth(arrFloat, 9, /edge_mirror)
>>
>> and to show that I get the same answer as above (at least in this case) by smoothing along each dimension in separate commands:
>>
>> IDL> smFLoat1 = smooth(arrFloat, [9,1], /edge_mirror)
>> IDL> smFloat2 = smooth(smFloat1, [1,9], /edge_mirror)
>> IDL> print, moment(smFloat2 - smFloat)
>> 0.00000 0.00000 NaN NaN
>>
>> IDL> !version
>> {
>> "ARCH": "x86_64",
>> "OS": "darwin",
>> "OS_FAMILY": "unix",
>> "OS_NAME": "Mac OS X",
>> "RELEASE": "8.5",
>> "BUILD_DATE": "Jul 7 2015",
>> "MEMORY_BITS": 64,
>> "FILE_OFFSET_BITS": 64
>> }
>>
>> -Jeff
>
> Thanks! This saves the day... or something like that.
> :-)
> Cheers,
> Helder
Hi all,
Yes, this bug has been in the SMOOTH function since IDL 8.1 when the EDGE_MIRROR and EDGE_WRAP keywords were added. It works fine for square arrays, but walks off the end of the array for non-square arrays.
It's now been fixed, and will be in IDL Next (not 8.6).
Cheers,
Chris
Harris Geospatial Solutions
|