Rigid body - set transformation
Is the transformation given in set_transformation relative to a global internal coordinate system or to the rigid body internal coordinate system ? If the answer is that it is relative to the rigid body internal coordinate system -how can you move the rigid body to a specific position in space ?
Thank you ! Keren.
it is rigid body internal coord. transformation. you can move by composing it with your move. take a look at RigidBodyMover.cpp propose_move func.
On Fri, May 22, 2009 at 7:43 PM, Keren Lasker kerenl@salilab.org wrote: > > Is the transformation given in set_transformation relative to a global > internal coordinate system or to the rigid body internal coordinate system > ? > If the answer is that it is relative to the rigid body internal coordinate > system -how can you move the rigid body to a specific position in space ? > > Thank you ! > Keren. > > > _______________________________________________ > IMP-dev mailing list > IMP-dev@salilab.org > https://salilab.org/mailman/listinfo/imp-dev >
thanks - but what I want to do is different from RigidBodyMover as the transformation should be absolute and not relative. On May 22, 2009, at 9:40 PM, Dina Schneidman wrote:
> it is rigid body internal coord. transformation. > you can move by composing it with your move. take a look at > RigidBodyMover.cpp propose_move func. > > On Fri, May 22, 2009 at 7:43 PM, Keren Lasker kerenl@salilab.org > wrote: >> >> Is the transformation given in set_transformation relative to a >> global >> internal coordinate system or to the rigid body internal coordinate >> system >> ? >> If the answer is that it is relative to the rigid body internal >> coordinate >> system -how can you move the rigid body to a specific position in >> space ? >> >> Thank you ! >> Keren. >> >> >> _______________________________________________ >> IMP-dev mailing list >> IMP-dev@salilab.org >> https://salilab.org/mailman/listinfo/imp-dev >> > _______________________________________________ > IMP-dev mailing list > IMP-dev@salilab.org > https://salilab.org/mailman/listinfo/imp-dev
Assuming you want to transform, say, the input pdb, then just get the transformation immediately following creation and compose with that (since the initial transform has not moved the object).
On May 22, 2009, at 10:27 PM, Keren Lasker kerenl@salilab.org wrote:
> thanks - but what I want to do is different from RigidBodyMover as > the transformation should be absolute and not relative. > On May 22, 2009, at 9:40 PM, Dina Schneidman wrote: > >> it is rigid body internal coord. transformation. >> you can move by composing it with your move. take a look at >> RigidBodyMover.cpp propose_move func. >> >> On Fri, May 22, 2009 at 7:43 PM, Keren Lasker kerenl@salilab.org >> wrote: >>> >>> Is the transformation given in set_transformation relative to a >>> global >>> internal coordinate system or to the rigid body internal >>> coordinate system >>> ? >>> If the answer is that it is relative to the rigid body internal >>> coordinate >>> system -how can you move the rigid body to a specific position in >>> space ? >>> >>> Thank you ! >>> Keren. >>> >>> >>> _______________________________________________ >>> IMP-dev mailing list >>> IMP-dev@salilab.org >>> https://salilab.org/mailman/listinfo/imp-dev >>> >> _______________________________________________ >> IMP-dev mailing list >> IMP-dev@salilab.org >> https://salilab.org/mailman/listinfo/imp-dev > > _______________________________________________ > IMP-dev mailing list > IMP-dev@salilab.org > https://salilab.org/mailman/listinfo/imp-dev
I know Daniel .... This is how I solved it now - but I would like to change the centroid of the rigid body after an optimization stage since it is part of a bigger optimization protocol. On May 25, 2009, at 1:54 PM, Daniel Russel wrote:
> Assuming you want to transform, say, the input pdb, then just get > the transformation immediately following creation and compose with > that (since the initial transform has not moved the object). > > > > On May 22, 2009, at 10:27 PM, Keren Lasker kerenl@salilab.org wrote: > >> thanks - but what I want to do is different from RigidBodyMover as >> the transformation should be absolute and not relative. >> On May 22, 2009, at 9:40 PM, Dina Schneidman wrote: >> >>> it is rigid body internal coord. transformation. >>> you can move by composing it with your move. take a look at >>> RigidBodyMover.cpp propose_move func. >>> >>> On Fri, May 22, 2009 at 7:43 PM, Keren Lasker kerenl@salilab.org >>> wrote: >>>> >>>> Is the transformation given in set_transformation relative to a >>>> global >>>> internal coordinate system or to the rigid body internal >>>> coordinate system >>>> ? >>>> If the answer is that it is relative to the rigid body internal >>>> coordinate >>>> system -how can you move the rigid body to a specific position in >>>> space ? >>>> >>>> Thank you ! >>>> Keren. >>>> >>>> >>>> _______________________________________________ >>>> IMP-dev mailing list >>>> IMP-dev@salilab.org >>>> https://salilab.org/mailman/listinfo/imp-dev >>>> >>> _______________________________________________ >>> IMP-dev mailing list >>> IMP-dev@salilab.org >>> https://salilab.org/mailman/listinfo/imp-dev >> >> _______________________________________________ >> IMP-dev mailing list >> IMP-dev@salilab.org >> https://salilab.org/mailman/listinfo/imp-dev > _______________________________________________ > IMP-dev mailing list > IMP-dev@salilab.org > https://salilab.org/mailman/listinfo/imp-dev
As with any thing you want to use that is an offset from a value, you need to keep track of the offset and subtract it when you set the value. For ease with rigid bodies, compute the centroid in the rigid body frame (or apply the inverse transform to map a point in external coordinates) and then rotate the internal coordinates and subtract them before setting when you want to set the translational part of the coordinats later. Make sense?
If you don't care what centroid you use, just use the rigid body center (since it is currently a unwejghted centroid and will at most change to a weighted centroid).
On May 25, 2009, at 2:01 PM, Keren Lasker kerenl@salilab.org wrote:
> I know Daniel .... > This is how I solved it now - but I would like to change the > centroid of the rigid body after an optimization stage since it is > part of a bigger optimization protocol. > On May 25, 2009, at 1:54 PM, Daniel Russel wrote: > >> Assuming you want to transform, say, the input pdb, then just get >> the transformation immediately following creation and compose with >> that (since the initial transform has not moved the object). >> >> >> >> On May 22, 2009, at 10:27 PM, Keren Lasker kerenl@salilab.org >> wrote: >> >>> thanks - but what I want to do is different from RigidBodyMover as >>> the transformation should be absolute and not relative. >>> On May 22, 2009, at 9:40 PM, Dina Schneidman wrote: >>> >>>> it is rigid body internal coord. transformation. >>>> you can move by composing it with your move. take a look at >>>> RigidBodyMover.cpp propose_move func. >>>> >>>> On Fri, May 22, 2009 at 7:43 PM, Keren Lasker >>>> kerenl@salilab.org wrote: >>>>> >>>>> Is the transformation given in set_transformation relative to a >>>>> global >>>>> internal coordinate system or to the rigid body internal >>>>> coordinate system >>>>> ? >>>>> If the answer is that it is relative to the rigid body internal >>>>> coordinate >>>>> system -how can you move the rigid body to a specific position >>>>> in space ? >>>>> >>>>> Thank you ! >>>>> Keren. >>>>> >>>>> >>>>> _______________________________________________ >>>>> IMP-dev mailing list >>>>> IMP-dev@salilab.org >>>>> https://salilab.org/mailman/listinfo/imp-dev >>>>> >>>> _______________________________________________ >>>> IMP-dev mailing list >>>> IMP-dev@salilab.org >>>> https://salilab.org/mailman/listinfo/imp-dev >>> >>> _______________________________________________ >>> IMP-dev mailing list >>> IMP-dev@salilab.org >>> https://salilab.org/mailman/listinfo/imp-dev >> _______________________________________________ >> IMP-dev mailing list >> IMP-dev@salilab.org >> https://salilab.org/mailman/listinfo/imp-dev > > _______________________________________________ > IMP-dev mailing list > IMP-dev@salilab.org > https://salilab.org/mailman/listinfo/imp-dev
this all makes sense yes. I am just not that is the most intuitive way to work. I would suggest adding functions for an external coordinate set and get transformation of RigidBodies as the internal coordinate system is an implementation detail. On May 25, 2009, at 4:30 PM, Daniel Russel wrote:
> As with any thing you want to use that is an offset from a value, > you need to keep track of the offset and subtract it when you set > the value. For ease with rigid bodies, compute the centroid in the > rigid body frame (or apply the inverse transform to map a point in > external coordinates) and then rotate the internal coordinates and > subtract them before setting when you want to set the translational > part of the coordinats later. Make sense? > > If you don't care what centroid you use, just use the rigid body > center (since it is currently a unwejghted centroid and will at most > change to a weighted centroid). > > > > On May 25, 2009, at 2:01 PM, Keren Lasker kerenl@salilab.org wrote: > >> I know Daniel .... >> This is how I solved it now - but I would like to change the >> centroid of the rigid body after an optimization stage since it is >> part of a bigger optimization protocol. >> On May 25, 2009, at 1:54 PM, Daniel Russel wrote: >> >>> Assuming you want to transform, say, the input pdb, then just get >>> the transformation immediately following creation and compose with >>> that (since the initial transform has not moved the object). >>> >>> >>> >>> On May 22, 2009, at 10:27 PM, Keren Lasker kerenl@salilab.org >>> wrote: >>> >>>> thanks - but what I want to do is different from RigidBodyMover >>>> as the transformation should be absolute and not relative. >>>> On May 22, 2009, at 9:40 PM, Dina Schneidman wrote: >>>> >>>>> it is rigid body internal coord. transformation. >>>>> you can move by composing it with your move. take a look at >>>>> RigidBodyMover.cpp propose_move func. >>>>> >>>>> On Fri, May 22, 2009 at 7:43 PM, Keren Lasker >>>>> kerenl@salilab.org wrote: >>>>>> >>>>>> Is the transformation given in set_transformation relative to a >>>>>> global >>>>>> internal coordinate system or to the rigid body internal >>>>>> coordinate system >>>>>> ? >>>>>> If the answer is that it is relative to the rigid body internal >>>>>> coordinate >>>>>> system -how can you move the rigid body to a specific position >>>>>> in space ? >>>>>> >>>>>> Thank you ! >>>>>> Keren. >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> IMP-dev mailing list >>>>>> IMP-dev@salilab.org >>>>>> https://salilab.org/mailman/listinfo/imp-dev >>>>>> >>>>> _______________________________________________ >>>>> IMP-dev mailing list >>>>> IMP-dev@salilab.org >>>>> https://salilab.org/mailman/listinfo/imp-dev >>>> >>>> _______________________________________________ >>>> IMP-dev mailing list >>>> IMP-dev@salilab.org >>>> https://salilab.org/mailman/listinfo/imp-dev >>> _______________________________________________ >>> IMP-dev mailing list >>> IMP-dev@salilab.org >>> https://salilab.org/mailman/listinfo/imp-dev >> >> _______________________________________________ >> IMP-dev mailing list >> IMP-dev@salilab.org >> https://salilab.org/mailman/listinfo/imp-dev > _______________________________________________ > IMP-dev mailing list > IMP-dev@salilab.org > https://salilab.org/mailman/listinfo/imp-dev
On May 25, 2009, at 5:22 PM, Keren Lasker wrote:
> this all makes sense yes. > I am just not that is the most intuitive way to work What is a more intuitive alternative. The current setup It works quite a bit like the code for creating a centroid.
> I would suggest adding functions for an external coordinate set and > get transformation of RigidBodies as the internal coordinate system > is an implementation detail. I don't know what such would mean. Could you clarify?
If someone gives you a bunch of particles, there isn't really a single natural reference point. Different choices makes sense depending on what you are doing with them. The code currently uses the standard way of defining the position and orientation from physics when using rigid bodies.
I do agree that it probably makes sense to add a transform function for rigid bodies to go with the one for IMP.atom.Hierarchy.
> On May 25, 2009, at 4:30 PM, Daniel Russel wrote: > >> As with any thing you want to use that is an offset from a value, >> you need to keep track of the offset and subtract it when you set >> the value. For ease with rigid bodies, compute the centroid in the >> rigid body frame (or apply the inverse transform to map a point in >> external coordinates) and then rotate the internal coordinates and >> subtract them before setting when you want to set the >> translational part of the coordinats later. Make sense? >> >> If you don't care what centroid you use, just use the rigid body >> center (since it is currently a unwejghted centroid and will at >> most change to a weighted centroid). >> >> >> >> On May 25, 2009, at 2:01 PM, Keren Lasker kerenl@salilab.org wrote: >> >>> I know Daniel .... >>> This is how I solved it now - but I would like to change the >>> centroid of the rigid body after an optimization stage since it is >>> part of a bigger optimization protocol. >>> On May 25, 2009, at 1:54 PM, Daniel Russel wrote: >>> >>>> Assuming you want to transform, say, the input pdb, then just get >>>> the transformation immediately following creation and compose >>>> with that (since the initial transform has not moved the object). >>>> >>>> >>>> >>>> On May 22, 2009, at 10:27 PM, Keren Lasker kerenl@salilab.org >>>> wrote: >>>> >>>>> thanks - but what I want to do is different from RigidBodyMover >>>>> as the transformation should be absolute and not relative. >>>>> On May 22, 2009, at 9:40 PM, Dina Schneidman wrote: >>>>> >>>>>> it is rigid body internal coord. transformation. >>>>>> you can move by composing it with your move. take a look at >>>>>> RigidBodyMover.cpp propose_move func. >>>>>> >>>>>> On Fri, May 22, 2009 at 7:43 PM, Keren Lasker >>>>>> kerenl@salilab.org wrote: >>>>>>> >>>>>>> Is the transformation given in set_transformation relative to >>>>>>> a global >>>>>>> internal coordinate system or to the rigid body internal >>>>>>> coordinate system >>>>>>> ? >>>>>>> If the answer is that it is relative to the rigid body >>>>>>> internal coordinate >>>>>>> system -how can you move the rigid body to a specific position >>>>>>> in space ? >>>>>>> >>>>>>> Thank you ! >>>>>>> Keren. >>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> IMP-dev mailing list >>>>>>> IMP-dev@salilab.org >>>>>>> https://salilab.org/mailman/listinfo/imp-dev >>>>>>> >>>>>> _______________________________________________ >>>>>> IMP-dev mailing list >>>>>> IMP-dev@salilab.org >>>>>> https://salilab.org/mailman/listinfo/imp-dev >>>>> >>>>> _______________________________________________ >>>>> IMP-dev mailing list >>>>> IMP-dev@salilab.org >>>>> https://salilab.org/mailman/listinfo/imp-dev >>>> _______________________________________________ >>>> IMP-dev mailing list >>>> IMP-dev@salilab.org >>>> https://salilab.org/mailman/listinfo/imp-dev >>> >>> _______________________________________________ >>> IMP-dev mailing list >>> IMP-dev@salilab.org >>> https://salilab.org/mailman/listinfo/imp-dev >> _______________________________________________ >> IMP-dev mailing list >> IMP-dev@salilab.org >> https://salilab.org/mailman/listinfo/imp-dev > > _______________________________________________ > IMP-dev mailing list > IMP-dev@salilab.org > https://salilab.org/mailman/listinfo/imp-dev
On May 25, 2009, at 8:21 PM, Daniel Russel wrote:
> > On May 25, 2009, at 5:22 PM, Keren Lasker wrote: > >> this all makes sense yes. >> I am just not that is the most intuitive way to work > What is a more intuitive alternative. The current setup It works > quite a bit like the code for creating a centroid. > >> I would suggest adding functions for an external coordinate set and >> get transformation of RigidBodies as the internal coordinate system >> is an implementation detail. > I don't know what such would mean. Could you clarify? > > If someone gives you a bunch of particles, there isn't really a > single natural reference point. Different choices makes sense > depending on what you are doing with them. The code currently uses > the standard way of defining the position and orientation from > physics when using rigid bodies. > > I do agree that it probably makes sense to add a transform function > for rigid bodies to go with the one for IMP.atom.Hierarchy. yes ! this is exactly what I need for the optimization !! :)
> > >> On May 25, 2009, at 4:30 PM, Daniel Russel wrote: >> >>> As with any thing you want to use that is an offset from a value, >>> you need to keep track of the offset and subtract it when you set >>> the value. For ease with rigid bodies, compute the centroid in the >>> rigid body frame (or apply the inverse transform to map a point in >>> external coordinates) and then rotate the internal coordinates and >>> subtract them before setting when you want to set the >>> translational part of the coordinats later. Make sense? >>> >>> If you don't care what centroid you use, just use the rigid body >>> center (since it is currently a unwejghted centroid and will at >>> most change to a weighted centroid). >>> >>> >>> >>> On May 25, 2009, at 2:01 PM, Keren Lasker kerenl@salilab.org >>> wrote: >>> >>>> I know Daniel .... >>>> This is how I solved it now - but I would like to change the >>>> centroid of the rigid body after an optimization stage since it >>>> is part of a bigger optimization protocol. >>>> On May 25, 2009, at 1:54 PM, Daniel Russel wrote: >>>> >>>>> Assuming you want to transform, say, the input pdb, then just >>>>> get the transformation immediately following creation and >>>>> compose with that (since the initial transform has not moved the >>>>> object). >>>>> >>>>> >>>>> >>>>> On May 22, 2009, at 10:27 PM, Keren Lasker kerenl@salilab.org >>>>> wrote: >>>>> >>>>>> thanks - but what I want to do is different from RigidBodyMover >>>>>> as the transformation should be absolute and not relative. >>>>>> On May 22, 2009, at 9:40 PM, Dina Schneidman wrote: >>>>>> >>>>>>> it is rigid body internal coord. transformation. >>>>>>> you can move by composing it with your move. take a look at >>>>>>> RigidBodyMover.cpp propose_move func. >>>>>>> >>>>>>> On Fri, May 22, 2009 at 7:43 PM, Keren Lasker <kerenl@salilab.org >>>>>>> > wrote: >>>>>>>> >>>>>>>> Is the transformation given in set_transformation relative to >>>>>>>> a global >>>>>>>> internal coordinate system or to the rigid body internal >>>>>>>> coordinate system >>>>>>>> ? >>>>>>>> If the answer is that it is relative to the rigid body >>>>>>>> internal coordinate >>>>>>>> system -how can you move the rigid body to a specific >>>>>>>> position in space ? >>>>>>>> >>>>>>>> Thank you ! >>>>>>>> Keren. >>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> IMP-dev mailing list >>>>>>>> IMP-dev@salilab.org >>>>>>>> https://salilab.org/mailman/listinfo/imp-dev >>>>>>>> >>>>>>> _______________________________________________ >>>>>>> IMP-dev mailing list >>>>>>> IMP-dev@salilab.org >>>>>>> https://salilab.org/mailman/listinfo/imp-dev >>>>>> >>>>>> _______________________________________________ >>>>>> IMP-dev mailing list >>>>>> IMP-dev@salilab.org >>>>>> https://salilab.org/mailman/listinfo/imp-dev >>>>> _______________________________________________ >>>>> IMP-dev mailing list >>>>> IMP-dev@salilab.org >>>>> https://salilab.org/mailman/listinfo/imp-dev >>>> >>>> _______________________________________________ >>>> IMP-dev mailing list >>>> IMP-dev@salilab.org >>>> https://salilab.org/mailman/listinfo/imp-dev >>> _______________________________________________ >>> IMP-dev mailing list >>> IMP-dev@salilab.org >>> https://salilab.org/mailman/listinfo/imp-dev >> >> _______________________________________________ >> IMP-dev mailing list >> IMP-dev@salilab.org >> https://salilab.org/mailman/listinfo/imp-dev > > _______________________________________________ > IMP-dev mailing list > IMP-dev@salilab.org > https://salilab.org/mailman/listinfo/imp-dev
RigidBody::set_transformation(t) transform the rigid body with respect to its internal coordinate system. However, many times we need to update the transformation of a rigid body according to a global transformation, for example move the centroid of a rigid body to some point in space. Is it possible to add another function that allows such functionality ?
On May 22, 2009, at 7:43 PM, Keren Lasker wrote:
> > Is the transformation given in set_transformation relative to a > global internal coordinate system or to the rigid body internal > coordinate system ? > If the answer is that it is relative to the rigid body internal > coordinate system -how can you move the rigid body to a specific > position in space ? > > Thank you ! > Keren. > > > _______________________________________________ > IMP-dev mailing list > IMP-dev@salilab.org > https://salilab.org/mailman/listinfo/imp-dev
Set-transfomation is the direct analog of set-coordinates for xyz. Maybe we should just call it set-coordinates(trAnsformation3d)
On May 22, 2009, at 7:43 PM, Keren Lasker kerenl@salilab.org wrote:
> > Is the transformation given in set_transformation relative to a > global internal coordinate system or to the rigid body internal > coordinate system ? > If the answer is that it is relative to the rigid body internal > coordinate system -how can you move the rigid body to a specific > position in space ? > > Thank you ! > Keren. > > > _______________________________________________ > IMP-dev mailing list > IMP-dev@salilab.org > https://salilab.org/mailman/listinfo/imp-dev
participants (3)
-
Daniel Russel
-
Dina Schneidman
-
Keren Lasker