code: def get_default_values(self):
          
          out = dict(dx=0, dy=0, dz=0, theta=0, phi=0, psi=0)
          dx, dy, dz, _ = np.mean(self.coord1 - self.coord2, axis=1)
          out['dx'] = dx
          out['dy'] = dy
          out['dz'] = dz
  
          # C->N vector
          vec1 = self.coord1[:-1, 1] - self.coord1[:-1, -1]
          vec2 = self.coord2[:-1, 1] - self.coord2[:-1, -1]
          vec1 /= np.linalg.norm(vec1)
          vec2 /= np.linalg.norm(vec2)
  
          # Find the rotation matrix that converts vec1 to vec2:
          # http://math.stackexchange.com/questions/180418/#476311
          v = np.cross(vec1, vec2)
          s = np.linalg.norm(v) + np.finfo(DTYPE).eps
  
          c = vec1.dot(vec2)
          vx = np.array([[0, -v[2], v[1]],
                         [v[2], 0, -v[0]],
                         [-v[1], v[0], 0]], dtype=DTYPE)
          rotation_matrix = np.eye(3) + vx + vx.dot(vx) * (1 - c) / (s * s)
  
          # Recover the angles from the matrix as seen here:
          # http://nghiaho.com/?page_id=846
          out['theta'] = math.atan2(rotation_matrix[2, 1], rotation_matrix[2, 2])
          out['phi'] = math.atan2(-rotation_matrix[2, 0],
                                  math.hypot(rotation_matrix[2, 1],
                                             rotation_matrix[2, 2]))
          out['psi'] = math.atan2(rotation_matrix[1, 0], rotation_matrix[0, 0])
  
          return out
docs: Make a crude estimation of the alignment using the center of mass
          and general C->N orientation.