Ejemplo n.º 1
0
    def test_npc_like(self):
        """Test that nested transforms match in IMP and RMF with npc-like config"""
        coords = list(IMP.algebra.get_random_vector_in(
            IMP.algebra.get_unit_sphere_3d()))

        name = RMF._get_temporary_file_path("test_transform_npc.rmfz")
        fh = RMF.create_rmf_file(name)

        rr0 = IMP.algebra.get_random_rotation_3d()

        t0 = IMP.algebra.get_random_vector_in(IMP.algebra.get_unit_sphere_3d())

        rff = RMF.ReferenceFrameFactory(fh)
        rfcf = RMF.ReferenceFrameFactory(fh)
        pf = RMF.ParticleFactory(fh)

        ch0 = fh.get_root_node().add_child("ch0", RMF.REPRESENTATION)
        n0 = ch0.add_child("n0", RMF.REPRESENTATION)
        n1 = ch0.add_child("n1", RMF.REPRESENTATION)
        n2 = ch0.add_child("n2", RMF.REPRESENTATION)

        rff.get(ch0).set_translation(RMF.Vector3(*t0))
        rff.get(ch0).set_rotation(RMF.Vector4(*rr0.get_quaternion()))
        pf.get(ch0).set_coordinates(RMF.Vector3(0, 0, 0))
        pf.get(ch0).set_radius(1)
        pf.get(ch0).set_mass(1)

        pf.get(n0).set_coordinates(RMF.Vector3(1, 0, 0))
        pf.get(n0).set_mass(1)
        pf.get(n0).set_radius(1)
        pf.get(n1).set_coordinates(RMF.Vector3(0, 1, 0))
        pf.get(n1).set_mass(1)
        pf.get(n1).set_radius(1)
        pf.get(n2).set_coordinates(RMF.Vector3(0, 0, 1))
        pf.get(n2).set_mass(1)
        pf.get(n2).set_radius(1)

        tr = IMP.algebra.Transformation3D(rr0, t0)
        ctro = RMF.CoordinateTransformer()
        ctr = RMF.CoordinateTransformer(ctro, rfcf.get(ch0))

        vch0 = ctr.get_global_coordinates(pf.get(ch0).get_coordinates())
        vn0 = ctr.get_global_coordinates(pf.get(n0).get_coordinates())
        vn1 = ctr.get_global_coordinates(pf.get(n1).get_coordinates())
        vn2 = ctr.get_global_coordinates(pf.get(n2).get_coordinates())
        vich0 = tr.get_transformed(IMP.algebra.Vector3D(0, 0, 0))
        vin0 = tr.get_transformed(IMP.algebra.Vector3D(1, 0, 0))
        vin1 = tr.get_transformed(IMP.algebra.Vector3D(0, 1, 0))
        vin2 = tr.get_transformed(IMP.algebra.Vector3D(0, 0, 1))
        print IMP.algebra.get_distance(vin0, vich0),\
            IMP.algebra.get_distance(vin1, vich0),\
            IMP.algebra.get_distance(vin2, vich0)
        for p in [(vch0, vich0), (vn0, vin0), (vn1, vin1), (vn2, vin2)]:
            print p[0], p[1]
            self.assertAlmostEqual(
                IMP.algebra.get_distance(p[1],
                                         IMP.algebra.Vector3D(*p[0])),
                0,
                delta=.1)
Ejemplo n.º 2
0
def visit(node, reference_frame, reference_frame_factory, particle_factory,
          segment_factory, ball_factory):
    if reference_frame_factory.get_is(node):
        reference_frame = RMF.CoordinateTransformer(
            reference_frame, reference_frame_factory.get(node))
        print("reference frame is now", reference_frame)
    elif segment_factory.get_is(node):
        segment = segment_factory.get(node)
        print("segment", node.get_name())
        # silliness
        coords = segment.get_coordinates()
        for i in range(0, len(coords[0])):
            print_coordinates(reference_frame,
                              [coords[0][i], coords[1][i], coords[2][i]])
    elif particle_factory.get_is(node):
        particle = particle_factory.get(node)
        print("particle", node.get_name(),
              print_coordinates(reference_frame, particle.get_coordinates()))
    elif ball_factory.get_is(node):
        particle = ball_factory.get(node)
        print("ball", node.get_name(),
              print_coordinates(reference_frame, particle.get_coordinates()))
    for c in node.get_children():
        visit(c, reference_frame, reference_frame_factory, particle_factory,
              segment_factory, ball_factory)
Ejemplo n.º 3
0
    def test_simple(self):
        """Test that nested transforms match in IMP and RMF"""
        coords = list(IMP.algebra.get_random_vector_in(
            IMP.algebra.get_unit_sphere_3d()))

        name = RMF._get_temporary_file_path("test_transform.rmfz")
        fh = RMF.create_rmf_file(name)

        rr0 = IMP.algebra.get_random_rotation_3d()
        rr1 = IMP.algebra.get_random_rotation_3d()

        t0 = IMP.algebra.get_random_vector_in(IMP.algebra.get_unit_sphere_3d())
        t1 = IMP.algebra.get_random_vector_in(IMP.algebra.get_unit_sphere_3d())

        rff = RMF.ReferenceFrameFactory(fh)
        rfcf = RMF.ReferenceFrameFactory(fh)
        pf = RMF.ParticleFactory(fh)

        ch0 = fh.get_root_node().add_child("ch0", RMF.REPRESENTATION)
        ch1 = ch0.add_child("ch1", RMF.REPRESENTATION)
        n = ch1.add_child("n", RMF.REPRESENTATION)

        rff.get(ch0).set_translation(RMF.Vector3(*t0))
        rff.get(ch1).set_translation(RMF.Vector3(*t1))
        rff.get(ch0).set_rotation(RMF.Vector4(*rr0.get_quaternion()))
        rff.get(ch1).set_rotation(RMF.Vector4(*rr1.get_quaternion()))
        pf.get(n).set_coordinates(RMF.Vector3(*coords))
        pf.get(n).set_radius(1)
        pf.get(n).set_mass(1)

        tr = IMP.algebra.Transformation3D(
            rr0,
            t0) * IMP.algebra.Transformation3D(
            rr1,
            t1)
        ctro = RMF.CoordinateTransformer()
        ctri = RMF.CoordinateTransformer(ctro, rfcf.get(ch0))
        ctr = RMF.CoordinateTransformer(ctri, rfcf.get(ch1))

        vr = ctr.get_global_coordinates(pf.get(n).get_coordinates())
        vi = tr.get_transformed(IMP.algebra.Vector3D(*coords))
        print vr, vi
        self.assertAlmostEqual(
            IMP.algebra.get_distance(vi,
                                     IMP.algebra.Vector3D(*vr)),
            0,
            delta=.1)
Ejemplo n.º 4
0
    if reference_frame_factory.get_is(node):
        reference_frame = RMF.CoordinateTransformer(
            reference_frame, reference_frame_factory.get(node))
        print("reference frame is now", reference_frame)
    elif segment_factory.get_is(node):
        segment = segment_factory.get(node)
        print("segment", node.get_name())
        # silliness
        coords = segment.get_coordinates()
        for i in range(0, len(coords[0])):
            print_coordinates(reference_frame,
                              [coords[0][i], coords[1][i], coords[2][i]])
    elif particle_factory.get_is(node):
        particle = particle_factory.get(node)
        print("particle", node.get_name(),
              print_coordinates(reference_frame, particle.get_coordinates()))
    elif ball_factory.get_is(node):
        particle = ball_factory.get(node)
        print("ball", node.get_name(),
              print_coordinates(reference_frame, particle.get_coordinates()))
    for c in node.get_children():
        visit(c, reference_frame, reference_frame_factory, particle_factory,
              segment_factory, ball_factory)


fh = RMF.open_rmf_file_read_only(RMF.get_example_path("reference_frames.rmf3"))

visit(fh.get_root_node(), RMF.CoordinateTransformer(),
      RMF.ReferenceFrameFactory(fh), RMF.ParticleFactory(fh),
      RMF.SegmentFactory(fh), RMF.BallFactory(fh))