Re: python ROOT access

From: Stanley Seibert <volsung_at_physics.utexas.edu>
Date: Sun, 2 Mar 2008 14:49:56 -0600


I see the same result with 5.18 on Mac OS X 10.5.2.

The problem is that PyROOT is letting you violate the method signature of GetRotationMatrix():

const Double_t *TGeoCombiTrans::GetRotationMatrix() const;

You should not assign values using the Double_t pointer returned by the method, as it is declared const. Assignment worked anyway for TGeoRotation since the method always returns a pointer to an internal buffer in the object. However, TGeoCombiTrans does this:

const Double_t *TGeoCombiTrans::GetRotationMatrix() const {
// get the rotation array

    if (!fRotation) return kIdentityMatrix;     return fRotation->GetRotationMatrix(); }

When it takes the first branch, it returns a pre-defined constant matrix, which for some reason triggers a segfault when you try to modify it.

See the TGeoCombiTrans constructor for the correct way to instantiate it with a given offset and rotation.

On Mar 2, 2008, at 2:22 PM, Michal Dwuznik wrote:

> Hi ROOTers,
> could someone with pyROOT configured properly check the following in
> python:
>
> (ROOT 5.19/01)
>
> $ python
> Python 2.5.2 (r252:60911, Feb 27 2008, 18:32:21)
> [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu1)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import ROOT
>>>> combi = ROOT.TGeoCombiTrans()
>>>> matrix = combi.GetRotationMatrix()
>>>> print matrix[0]
> 1.0
>>>> matrix[0]=0.99
>
> *** Break *** segmentation violation
> (no debugging symbols found)
> Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.
> 1".
> Attaching to program: /proc/8053/exe, process 8053
> [Thread debugging using libthread_db enabled]
> [New Thread 0xb7d428c0 (LWP 8053)]
> [New Thread 0xb521db90 (LWP 8069)]
> (no debugging symbols found)...done.
>
> 0xb7eef410 in __kernel_vsyscall ()
> error detected on stdin
> The program is running. Quit anyway (and detach it)? (y or n)
> [answered Y; input not from terminal]
> Detaching from program: /proc/8053/exe, process 8053
>
>>>> combi = ROOT.TGeoRotation()
>>>> matrix = combi.GetRotationMatrix()
>>>> matrix[0]
> 1.0
>>>> matrix[0]=0.99
>>>> print matrix[0]
> 0.99
>
> In the same time doing quite the same with TGeoRotation instead
> works OK.
> What's my error then ? Or what's the proper way of feeding a
> TGeoCombiTrans
> from python with [x,y,z] as translation and [1,0,0,0,1,0,0,0,1] as
> rotation "matrix" ?
>
> Regards
> Michal
Received on Sun Mar 02 2008 - 21:50:24 CET

This archive was generated by hypermail 2.2.0 : Sun Mar 02 2008 - 23:50:01 CET