def choose_axe_adaptors(path_subsampled_fastqs, paired_end, output_path, threads):
    adapters = ['TruSeq2', 'TruSeq3', 'TruSeq3-2', 'Nextera']
    threads = min(threads, multiprocessing.cpu_count(), 16)
    original_size = get_directory_size(os.path.dirname(path_subsampled_fastqs[0]))
    logging.info('Original size of the subsampled_fastqs = ' + str(original_size))
    best_size = original_size
    best_adap = None
    for adapter in adapters:
        if paired_end:
            axe_adaptors_paired_end(path_subsampled_fastqs, output_path, adapter, threads, shell=False)
        else:
            axe_adaptors_single_end(path_subsampled_fastqs, output_path, adapter, threads, shell=False)
        fastqs_path_size = get_directory_size(output_path)
        logging.info("Adapters: {adapter}\tFile Size: {filesize}".format(adapter=adapter, filesize=fastqs_path_size))
        if fastqs_path_size <= best_size:
            best_size = fastqs_path_size
            best_adap = adapter

    if best_size < 0.995*original_size:
        # Actually write the best files again for use in later steps
        logging.info("Best Adapters: {adapter}\tFile Size: {filesize}".format(adapter=best_adap, filesize=best_size))

        if paired_end:
            files = axe_adaptors_paired_end(path_subsampled_fastqs, output_path, best_adap, threads, shell=False)
        else:
            files = axe_adaptors_single_end(path_subsampled_fastqs, output_path, best_adap, threads, shell=False)
        return best_adap, best_size, files
    else:
        return None, original_size, path_subsampled_fastqs