def METHOD_NAME(atom_position, bond_position, angle_position, torsion_position):
            a = atom_position - bond_position
            b = angle_position - bond_position
            #3-4 bond
            c = angle_position - torsion_position
            a_u = a / _norm(a)
            b_u = b / _norm(b)
            c_u = c / _norm(c)
            #bond length
            r = _norm(a)
            #bond angle
            cos_theta = np.dot(a_u, b_u)
            if cos_theta > 1.0:
                cos_theta = 1.0
            elif cos_theta < -1.0:
                cos_theta = -1.0
            theta = np.arccos(cos_theta)
            #torsion angle
            plane1 = _cross_vec3(a_u, b_u)
            plane2 = _cross_vec3(b_u, c_u)
            cos_phi = np.dot(plane1, plane2) / (_norm(plane1)*_norm(plane2))
            if cos_phi < -1.0:
                cos_phi = -1.0
            elif cos_phi > 1.0:
                cos_phi = 1.0
            phi = np.arccos(cos_phi)
            if np.dot(a, plane2) <= 0:
                phi = -phi
            return np.array([r, theta, phi])