To calculate angle (Radian) between two tangent vectors of global helical axis.

        Parameters
        ----------
        base_step : 1D list
            List of two base-steps for which angle will be calculated.
            For example: **base_step** = ``[5, 50]`` either of following can be calculated.

                (1) angle between tangent vector 5th and 50th base-steps.
                (2) summation over 44 angles that are formed between adjacent tangent
                    vectors of 5-50 bp DNA segment.

            See below two choose between these two types.

        cumulative : bool)
            ``Default: False``: If it is false, first type of angle is calculated
            otherwise second type of angle is calculated as explained in the above
            example of option ``base_step``.

        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 : 1D array
            Array of calculated angle of length is equal to number of frames.
            When ``masked`` is applied, length of this array can be smaller than
            total number of frames.

def calculate_angle_bw_tangents(self, base_step, cumulative=False, masked=False):
        """To calculate angle (Radian) between two tangent vectors of global helical axis.

        Parameters
        ----------
        base_step : 1D list
            List of two base-steps for which angle will be calculated.
            For example: **base_step** = ``[5, 50]`` either of following can be calculated.

                (1) angle between tangent vector 5th and 50th base-steps.
                (2) summation over 44 angles that are formed between adjacent tangent
                    vectors of 5-50 bp DNA segment.

            See below two choose between these two types.

        cumulative : bool)
            ``Default: False``: If it is false, first type of angle is calculated
            otherwise second type of angle is calculated as explained in the above
            example of option ``base_step``.

        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 : 1D array
            Array of calculated angle 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!!!")

        angle = []
        if cumulative:
            angle_tmp = []
            tangent, idx = self.get_parameters(
                'tangent', bp=base_step, bp_range=True, masked=masked)
            for i in range(len(idx) - 1):
                angle_tmp.append(vector_angle(tangent[i], tangent[i + 1]))
            angle = np.asarray(angle_tmp).sum(axis=0)

        else:
            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)
            angle = vector_angle(tangent1[0], tangent2[0])

        return np.asarray(angle)