Creates a `Helix` between `start` and `end`.

        Parameters
        ----------
        start : 3D Vector (tuple or list or numpy.array)
            The coordinate of the start of the helix primitive.
        end : 3D Vector (tuple or list or numpy.array)
            The coordinate of the end of the helix primitive.
        aa : int, optional
            Number of amino acids in the `Helix`. If `None, an
            appropriate number of residues are added.
        helix_type : str, optional
            Type of helix, can be: 'alpha', 'pi', '3-10',
            'PPI', 'PPII', 'collagen'.

def from_start_and_end(cls, start, end, aa=None, helix_type='alpha'):
        """Creates a `Helix` between `start` and `end`.

        Parameters
        ----------
        start : 3D Vector (tuple or list or numpy.array)
            The coordinate of the start of the helix primitive.
        end : 3D Vector (tuple or list or numpy.array)
            The coordinate of the end of the helix primitive.
        aa : int, optional
            Number of amino acids in the `Helix`. If `None, an
            appropriate number of residues are added.
        helix_type : str, optional
            Type of helix, can be: 'alpha', 'pi', '3-10',
            'PPI', 'PPII', 'collagen'.
        """
        start = numpy.array(start)
        end = numpy.array(end)
        if aa is None:
            rise_per_residue = _helix_parameters[helix_type][1]
            aa = int((numpy.linalg.norm(end - start) / rise_per_residue) + 1)
        instance = cls(aa=aa, helix_type=helix_type)
        instance.move_to(start=start, end=end)
        return instance