[ITK] [ITK-users] (R wrapping/SimpleITK) AddCommand to ImageRegistrationMethod bug

Mathew Guilfoyle mrguilfoyle at gmail.com
Mon Apr 11 18:12:23 EDT 2016


You were entirely correct… I’ve compiled SimpleITK from the latest snapshot today and the $AddCommand seems to be working correctly now, at least when tested in a ImageRegistrationMethod script.

Of note, I tried building the latest snapshot with the version of SWIG that the superbuild downloads and I still get the errors with passing a R character vector argument to (e.g.) ImageSeriesReader$SetFileNames().  When I build with the patched version of SWIG (supplied by Richard) then it works as expected.

Thanks again for all the help.

> On 11 Apr 2016, at 16:14, Bradley Lowekamp <brad at lowekamp.net> wrote:
> 
> Hello,
> 
> We have R tested with SimpleITK on a number of systems each night. And this morning we have run the tests on several systems, and it is running and passing OK, this was with what every old R version was on the systems
> 
> We should focus on getting the tests to pass on your system first. It’s a good sign that you can run the AddCommand with the sitk::Command class. Does the rest of the R tests pass when you run ctest?
> 
> I am still suspicious you are not running the latest development version. What is the git hash you are using?
> 
> As you were digging into the SimpleITK R code you were on the right track with the ProccessObject::AddCommand and the sitk::Command class. The other two parts you are missing is the RCommand C++ class [1], and the overridden ProcessObject::AddCommand method [2]. These were recently added to SimpleITK since the 0.9 release. You can see that the added procedure wraps the passed callable, into the RCommand class.
> 
> HTH,
> Brad
> 
> 
> [1] https://github.com/SimpleITK/SimpleITK/blob/master/Wrapping/R/sitkRCommand.h <https://github.com/SimpleITK/SimpleITK/blob/master/Wrapping/R/sitkRCommand.h>
> [2] https://github.com/SimpleITK/SimpleITK/blob/2ffffba589b24465a09eed1303bbffd6fe3fe18e/Wrapping/R/R.i#L565-L589 <https://github.com/SimpleITK/SimpleITK/blob/2ffffba589b24465a09eed1303bbffd6fe3fe18e/Wrapping/R/R.i#L565-L589>
> 
>> On Apr 11, 2016, at 3:59 AM, Mathew Guilfoyle <mrguilfoyle at gmail.com <mailto:mrguilfoyle at gmail.com>> wrote:
>> 
>> I tried running the code below as suggested - both in RStudio and the terminal - and get the same abort/segfault error.
>> 
>> Which version of R are you running? - I can install an older version to see if it works.
>> 
>>> On 11 Apr 2016, at 01:02, Richard Beare <richard.beare at gmail.com <mailto:richard.beare at gmail.com>> wrote:
>>> 
>>> This is a long shot, but lets try testing whether it is the R garbage collection causing issues. Modify the test so that every method call result is assigned to a different variable:
>>> 
>>> e.g.
>>> 
>>> a1 <- gaussian$SetVariance(2)
>>> a2 <- gaussian$AddCommand( 'sitkStartEvent',  f1 )
>>> a3 <- gaussian$AddCommand( 'sitkEndEvent', f2 )
>>> 
>>> I was running in a terminal on my mac, with an older version of R.
>>> 
>>> 
>>> On Mon, Apr 11, 2016 at 9:56 AM, Mathew Guilfoyle <mrguilfoyle at gmail.com <mailto:mrguilfoyle at gmail.com>> wrote:
>>> Richard
>>> 
>>> It seems it must be something specific to my setup.  I ran your example and get the same hard abort in Rstudio.  Running the example in R.app I get the same error but a  somewhat more graceful crash with the following error message:
>>> 
>>> gaussian$AddCommand( 'sitkStartEvent',  f1 )
>>> 
>>>  *** caught segfault ***
>>> address 0x7ff511000080, cause 'memory not mapped'
>>> 
>>> Traceback:
>>>  1: .Call("R_swig_ProcessObject_AddCommand", self, event, cmd, as.logical(.copy),     PACKAGE = "SimpleITK")
>>>  2: f(x, ...)
>>>  3: gaussian$AddCommand("sitkStartEvent", f1)
>>> 
>>> Possible actions:
>>> 1: abort (with core dump, if enabled)
>>> 2: normal R exit
>>> 3: exit R without saving workspace
>>> 4: exit R saving workspace
>>> 
>>> I have tried the version of SimpleITK built without the version of SWIG you patched to correct the character argument error, again I get the same behaviour. 
>>> 
>>> Bradley - I’m using the latest SimpleITK 0.9 source compiled using the super build on OS X 10.11.  I’ve done the build with the supplied SWIG and with a version patched by Richard and available here: https://github.com/richardbeare/swig.git <https://github.com/richardbeare/swig.git>.  I’m funning R 3.2.4 in Rstudio IDE.
>>> 
>>> 
>>> 
>>>> On 10 Apr 2016, at 23:17, Bradley Lowekamp <brad at lowekamp.net <mailto:brad at lowekamp.net>> wrote:
>>>> 
>>>> Hello,
>>>> 
>>>> I would like to know your environment. 
>>>> 
>>>> What version of SimpleITK?  R? OS? Compiler? Did you use simpleITK's super build? If not what version of SWIG?
>>>> 
>>>> Thanks
>>>> 
>>>>> On Apr 10, 2016, at 9:46 AM, Mathew Guilfoyle <mrguilfoyle at gmail.com <mailto:mrguilfoyle at gmail.com>> wrote:
>>>>> 
>>>>> Richard
>>>>> 
>>>>> Thanks for the reply.  I hadn't appreciated that function being passed in the registration example was a closure.  However, in the FiterProgressReporting example it is not a closure.  
>>>>> 
>>>>> I have modified my code to be a closure but still get a crash/abort; I have also run the code in the examples themselves verbatim and get the same problem.
>>>>> 
>>>>> Any further ideas on how to get this working?
>>>>> 
>>>>> Cheers 
>>>>> 
>>>>> 
>>>>>> On 10 Apr 2016, at 02:10, Mathew Guilfoyle <mrguilfoyle at gmail.com <mailto:mrguilfoyle at gmail.com>> wrote:
>>>>>> 
>>>>>> There seems to be a problem with using the $AddCommand function to ImageRegistrationMethod objects in the R wrapping to SimpleITK.
>>>>>> 
>>>>>> Using R 3.2.4 on OS X 10.11
>>>>>> 
>>>>>> Example:
>>>>>> 
>>>>>> f <- function(x){print(x$GetMetricValue())}
>>>>>> 
>>>>>> registration = ImageRegistrationMethod()
>>>>>> 
>>>>>> registration$AddCommand(‘sitkIterationEvent’, f(registration))
>>>>>> 
>>>>>> This last line causes R to abort/hard crash (no error message).  This behaviour is irrespective of which event type I use or the function passed as the second argument (e.g. even something simple like print(‘Hello’))
>>>>>> 
>>>>>> The AddCommand method is inherited from the SimpleITK ProcessObject type.  Digging around in the SimpleITK.R file I can see that the ProcessObject$AddCommand method expects a second argument of type ‘_p_itk__simple__Command’.
>>>>>> 
>>>>>> There is a ‘Command’ method that generates a new object of type ‘_p_itk__simple__Command’.  If I pass this resulting object as the second argument to registration$AddCommand then I do not get an error.  However, there doesn’t seem to be any way to point the ‘_p_itk__simple__Command’ object to my function or otherwise convert my function to a ‘_p_itk__simple__Command’ type.
>>>>>> 
>>>>>> The $AddCommand method is used in a couple of example scripts on the SimpleITK site (using it for monitoring a registration and a filter e.g. https://github.com/SimpleITK/SimpleITK/blob/master/Examples/FilterProgressReporting.R <https://github.com/SimpleITK/SimpleITK/blob/master/Examples/FilterProgressReporting.R>) so I don’t know if it was working previously and a bug has been introduced more recently? (the example scripts cause the same error when I run them now)
>>>>> 
>>>>> _____________________________________
>>>>> Powered by www.kitware.com <http://www.kitware.com/>
>>>>> 
>>>>> Visit other Kitware open-source projects at
>>>>> http://www.kitware.com/opensource/opensource.html <http://www.kitware.com/opensource/opensource.html>
>>>>> 
>>>>> Kitware offers ITK Training Courses, for more information visit:
>>>>> http://www.kitware.com/products/protraining.php <http://www.kitware.com/products/protraining.php>
>>>>> 
>>>>> Please keep messages on-topic and check the ITK FAQ at:
>>>>> http://www.itk.org/Wiki/ITK_FAQ <http://www.itk.org/Wiki/ITK_FAQ>
>>>>> 
>>>>> Follow this link to subscribe/unsubscribe:
>>>>> http://public.kitware.com/mailman/listinfo/insight-users <http://public.kitware.com/mailman/listinfo/insight-users>
>>> 
>>> 
>> 
>> _____________________________________
>> Powered by www.kitware.com <http://www.kitware.com/>
>> 
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html <http://www.kitware.com/opensource/opensource.html>
>> 
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/products/protraining.php <http://www.kitware.com/products/protraining.php>
>> 
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>> 
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/insight-users
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20160411/b523f74e/attachment-0001.html>
-------------- next part --------------
_____________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users


More information about the Community mailing list