Esempio n. 1
0
    def reorient_molecule(self, nuclei_list):
        first_nuclei = nuclei_list.pop(0)
        coordinates = first_nuclei.coordinates
        first_nuclei.coordinates = (0, 0, 0)

        for nuclei in nuclei_list:
            x = nuclei.coordinates[0] - coordinates[0]
            y = nuclei.coordinates[1] - coordinates[1]
            z = nuclei.coordinates[2] - coordinates[2]
            nuclei.coordinates = (x, y, z)

        if len(nuclei_list) >= 1:
            second_nuclei = nuclei_list[0]
            coordinates = normalize(second_nuclei.coordinates)

            quaternion = create_quaternion(
                (-coordinates[1], coordinates[0], 0.0), -theta(coordinates))
            for nuclei in nuclei_list:
                nuclei.coordinates = quaternion_rotation(
                    quaternion, nuclei.coordinates)

        if len(nuclei_list) >= 2:
            third_nuclei = nuclei_list[1]
            coordinates = normalize(third_nuclei.coordinates)

            quaternion = create_quaternion((0.0, 0.0, 1.0),
                                           -phi(coordinates) + np.pi / 2)
            for nuclei in nuclei_list:
                nuclei.coordinates = quaternion_rotation(
                    quaternion, nuclei.coordinates)

        return [first_nuclei], nuclei_list
Esempio n. 2
0
 def cross_products(self, vector_i, vector_j):
     cross_products = []
     for axis_i, axis_j in itertools.product(vector_i, vector_j):
         if axis_i is not axis_j:
             axis_cross = cross_product(axis_i, axis_j)
             if rho(axis_cross) > self.error:
                 axis_cross = normalize(axis_cross)
                 cross_products.append(axis_cross)
     return cross_products
Esempio n. 3
0
 def center_two_vertices(self, nuclei_array):
     center_of_edge = []
     for nuclei_i, nuclei_j in itertools.combinations(nuclei_array, 2):
         axis_i = nuclei_i.coordinates
         axis_j = nuclei_j.coordinates
         axis_edge = vector_add(axis_i, axis_j)
         if rho(axis_edge) > self.error:
             axis_edge = normalize(axis_edge)
             center_of_edge.append(axis_edge)
     return center_of_edge
Esempio n. 4
0
 def vertices(self, nuclei_array):
     corner = []
     for nuclei in nuclei_array:
         coordinates = normalize(nuclei.coordinates)
         corner.append(coordinates)
     return corner