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

Richard Beare richard.beare at gmail.com
Mon Apr 11 18:26:52 EDT 2016


The swig people haven't yet included my pull request for the character
vector stuff. Hopefully soon.

Also, we're currently working on an option for the super build that grabs
swig from a git repo. Hopefully you'll be able to try that soon.

On Tue, Apr 12, 2016 at 8:12 AM, Mathew Guilfoyle <mrguilfoyle at gmail.com>
wrote:

> 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
> [2]
> 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>
> 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> 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>
> 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.  I’m funning R 3.2.4 in
>> Rstudio IDE.
>>
>>
>>
>> On 10 Apr 2016, at 23:17, Bradley Lowekamp <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>
>> 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> 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)
>> 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
>>
>> 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
>>
>>
>>
>
> _____________________________________
> 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
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20160412/8669126b/attachment.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