def get_clusters_from_fasta_filepath(
        fasta_filepath,
        original_fasta_path,
        percent_ID=0.97,
        max_accepts=1,
        max_rejects=8,
        stepwords=8,
        word_length=8,
        optimal=False,
        exact=False,
        suppress_sort=False,
        output_dir=None,
        enable_rev_strand_matching=False,
        subject_fasta_filepath=None,
        suppress_new_clusters=False,
        return_cluster_maps=False,
        stable_sort=False,
        tmp_dir=gettempdir(),
        save_uc_files=True,
        HALT_EXEC=False):
    fasta_output_filepath = None
    uc_output_filepath = None
    cd_hit_filepath = None
    if output_dir and not output_dir.endswith('/'):
        output_dir += '/'
    if save_uc_files:
        uc_save_filepath = get_output_filepaths(
            output_dir,
            original_fasta_path)
    else:
        uc_save_filepath = None
    sorted_fasta_filepath = ""
    uc_filepath = ""
    clstr_filepath = ""
    files_to_remove = []
    try:
        if not suppress_sort:
            sort_fasta = uclust_fasta_sort_from_filepath(fasta_filepath,
                                                         output_filepath=fasta_output_filepath)
            sorted_fasta_filepath = sort_fasta['Output'].name
            files_to_remove.append(sorted_fasta_filepath)
        else:
            sort_fasta = None
            sorted_fasta_filepath = fasta_filepath
        uclust_cluster = uclust_cluster_from_sorted_fasta_filepath(
            sorted_fasta_filepath,
            uc_save_filepath,
            percent_ID=percent_ID,
            max_accepts=max_accepts,
            max_rejects=max_rejects,
            stepwords=stepwords,
            word_length=word_length,
            optimal=optimal,
            exact=exact,
            suppress_sort=suppress_sort,
            enable_rev_strand_matching=enable_rev_strand_matching,
            subject_fasta_filepath=subject_fasta_filepath,
            suppress_new_clusters=suppress_new_clusters,
            stable_sort=stable_sort,
            tmp_dir=tmp_dir,
            HALT_EXEC=HALT_EXEC)
        remove_files(files_to_remove)
    except ApplicationError:
        remove_files(files_to_remove)
        raise ApplicationError('Error running uclust. Possible causes are '
                               'unsupported version (current supported version is v1.2.22) is installed or '
                               'improperly formatted input file was provided')
    except ApplicationNotFoundError:
        remove_files(files_to_remove)
        raise ApplicationNotFoundError('uclust not found, is it properly ' +
                                       'installed?')
    clusters, failures, seeds = \
        clusters_from_uc_file(uclust_cluster['ClusterFile'])
    if not save_uc_files:
        uclust_cluster.cleanUp()
    if return_cluster_maps:
        return clusters, failures, seeds
    else:
        return clusters.values(), failures, seeds