def calculate_2D_angles_bw_tangents(self, paxis, base_step, masked=True):
        """ To calculate angles (Radian) in 2D plane between two tangent vectors of global helical axis.

        .. list-table::  Principal axis and respective 2D planes
            :widths: 1, 4
            :header-rows: 1
            :name: gui-table

            * - Principal Axis
              - 2D planes

            * - X-axis
              - XY and XZ planes

            * - Y-axis
              - XY and YZ planes

            * - Z-axis
              - XZ and YZ planes

        Parameters
        ----------
        paxis : str
            Principal axis parallel to the DNA axis. For example, IF DNA helical
            axis is parallel or aligned with Z-axis, paxis should be ``'Z'``.
        base_step : 1D list
            List of two base-steps for which angle will be calculated.
            For example: **base_step** = ``[5, 50]`` angle between tangent vector
            5th and 50th base-steps will be calculated.
        masked : bool
            ``Default=False``. To skip specific frames/snapshots.
            ``DNA.mask`` array should be set to use this functionality.
            This array contains boolean (either ``True`` or ``False``) value
            for each frame to mask the frames. Presently, mask array is
            automatically generated during :meth:`DNA.generate_smooth_axis` to
            skip those frames where 3D fitting curve was not successful within
            the given criteria.

        Returns
        -------
        angle-one : 1D array
            Array of calculated angle in first plane of length is equal to
            number of frames. When ``masked`` is applied, length of this array
            can be smaller than total number of frames.
        angle-two : 1D array
            Array of calculated angle in second plane of length is equal to
            number of frames. When ``masked`` is applied, length of this array
            can be smaller than total number of frames.

        """

        if (len(base_step) != 2):
            raise ValueError("See, documentation for step usage!!!")

        if base_step[0] > base_step[1]:
            raise ValueError("See, documentation for step usage!!!")

        axisDict = {'X': 0, 'Y': 1, 'Z': 2 }

        if paxis == 'Z':
            planes = [0, 1]
        elif paxis == 'X':
            planes = [1, 2]
        elif paxis == 'Y':
            planes = [0, 2]
        else:
            raise ValueError('{0} is not accepted keyword. USE: X Y or Z for DNA-axis.')

        tangent1, idx1 = self.get_parameters('tangent', bp=[base_step[0]], bp_range=False, masked=masked)
        tangent2, idx2 = self.get_parameters('tangent', bp=[base_step[1]], bp_range=False, masked=masked)


        angles = []
        for plane in planes:
            if plane == 0:
                norm = [1, 0, 0]
            elif plane == 1:
                norm = [0, 1, 0]
            else:
                norm = [0, 0, 1]

            temp1 = tangent1[0].T[plane].copy()
            temp2 = tangent2[0].T[plane].copy()

            tangent1[0].T[plane] = np.zeros(tangent1[0].T[plane].shape)
            tangent2[0].T[plane] = np.zeros(tangent2[0].T[plane].shape)

            angle = vector_angle(tangent1[0], tangent2[0], norm=norm)

            tangent1[0].T[plane]  = temp1
            tangent2[0].T[plane]  = temp2

            angles.append(angle)
        '''
        angles = []
        shape = (tangent1[0].shape[0], 2)
        for plane in planes:
            if plane == 0:
                norm = [1, 0, 0]
            elif plane == 1:
                norm = [0, 1, 0]
            else:
                norm = [0, 0, 1]

            temp1 = np.zeros(shape)
            temp2 = np.zeros(shape)

            print(tangent1[0].T.shape, temp1.T.shape)

            temp1[:, 0] = tangent1[0].T[plane][:]
            temp1[:, 1] = tangent1[0].T[axisDict[paxis]][:]
            temp2[:, 0] = tangent2[0].T[plane][:]
            temp2[:, 1] = tangent2[0].T[axisDict[paxis]][:]


            #tangent1[0].T[plane] = np.zeros(tangent1[0].T[plane].shape)
            #tangent2[0].T[plane] = np.zeros(tangent2[0].T[plane].shape)

            #angle = vector_angle(temp1, temp2)
            angle = []
            #print(np.linalg.det([temp1.T,temp2.T]).shape)
            for i in range(temp1.shape[0]):
                a = np.math.atan2(np.linalg.det([temp1[i],temp2[1]]), np.dot(temp1[i],temp2[1]))
                angle.append(a)
            angle = np.asarray(angle)

            #tangent1[0].T[plane]  = temp1
            #tangent2[0].T[plane]  = temp2

            angles.append(angle)
        '''



        return np.asarray(angles[0]), np.asarray(angles[1])
To calculate angles (Radian) in 2D plane between two tangent vectors of global helical axis.

        .. list-table::  Principal axis and respective 2D planes
            :widths: 1, 4
            :header-rows: 1
            :name: gui-table

            * - Principal Axis
              - 2D planes

            * - X-axis
              - XY and XZ planes

            * - Y-axis
              - XY and YZ planes

            * - Z-axis
              - XZ and YZ planes

        Parameters
        ----------
        paxis : str
            Principal axis parallel to the DNA axis. For example, IF DNA helical
            axis is parallel or aligned with Z-axis, paxis should be ``'Z'``.
        base_step : 1D list
            List of two base-steps for which angle will be calculated.
            For example: **base_step** = ``[5, 50]`` angle between tangent vector
            5th and 50th base-steps will be calculated.
        masked : bool
            ``Default=False``. To skip specific frames/snapshots.
            ``DNA.mask`` array should be set to use this functionality.
            This array contains boolean (either ``True`` or ``False``) value
            for each frame to mask the frames. Presently, mask array is
            automatically generated during :meth:`DNA.generate_smooth_axis` to
            skip those frames where 3D fitting curve was not successful within
            the given criteria.

        Returns
        -------
        angle-one : 1D array
            Array of calculated angle in first plane of length is equal to
            number of frames. When ``masked`` is applied, length of this array
            can be smaller than total number of frames.
        angle-two : 1D array
            Array of calculated angle in second plane of length is equal to
            number of frames. When ``masked`` is applied, length of this array
            can be smaller than total number of frames.