def run_fast(aligned, threads, cluster, node):
    """
    run FastTree
    """
    tree = '%s.fasttree.nwk' % (aligned.rsplit('.', 1)[0])
    if check(tree) is False:
        if 'FastTreeV' in os.environ:
            ft = os.environ['FastTreeV']
            os.environ['OMP_NUM_THREADS'] = str(threads)
        else:
            ft = 'FastTreeMP'
            os.environ['OMP_NUM_THREADS'] = str(threads)
        if check_type(aligned) == 'nucl':
            type = '-nt -gamma -spr 4 -mlacc 2 -slownni'
        else:
            type = '-spr 4 -mlacc 2 -slownni'
        dir = os.getcwd()
        command = 'cat %s/%s | cut -d \' \' -f 1 | %s -log %s/%s.log %s > %s/%s 2>>%s/%s.log' % \
                (dir, aligned, ft, dir, tree, type, dir, tree, dir, tree)
        if cluster is False:
            p = Popen(command, shell = True)
        else:
            if int(threads) > 24:
                ppn = 24
            else:
                ppn = threads
            re_call = 'cd %s; %s --no-rax' % (dir.rsplit('/', 1)[0], ' '.join(sys.argv))
            if node is False:
                node = '1'
            qsub = 'qsub -l nodes=%s:ppn=%s -m e -N FastTree' % (node, ppn)
            p = Popen('echo "%s;%s" | %s' % (command, re_call, qsub), shell = True)
        p.communicate()
    return tree