def count(args):
    """
    %prog count fastafile jf.db

    Run dump - jellyfish - bin - bincount in serial.
    """
    from bitarray import bitarray

    p = OptionParser(count.__doc__)
    opts, args = p.parse_args(args)

    if len(args) != 2:
        sys.exit(not p.print_help())

    fastafile, jfdb = args
    K = get_K(jfdb)
    cmd = "jellyfish query {0} -C | cut -d' ' -f 2".format(jfdb)
    t = must_open("tmp", "w")
    proc = Popen(cmd, stdin=PIPE, stdout=t)
    t.flush()

    f = Fasta(fastafile, lazy=True)
    for name, rec in f.iteritems_ordered():
        kmers = list(make_kmers(rec.seq, K))
        print("\n".join(kmers), file=proc.stdin)
    proc.stdin.close()
    logging.debug(cmd)
    proc.wait()

    a = bitarray()
    binfile = ".".join((fastafile, jfdb, "bin"))
    fw = open(binfile, "w")
    t.seek(0)
    for row in t:
        c = row.strip()
        a.append(int(c))
    a.tofile(fw)
    logging.debug("Serialize {0} bits to `{1}`.".format(len(a), binfile))
    fw.close()
    sh("rm {0}".format(t.name))

    logging.debug("Shared K-mers (K={0}) between `{1}` and `{2}` written to `{3}`.".\
                    format(K, fastafile, jfdb, binfile))
    cntfile = ".".join((fastafile, jfdb, "cnt"))
    bincount([fastafile, binfile, "-o", cntfile, "-K {0}".format(K)])
    logging.debug("Shared K-mer counts written to `{0}`.".format(cntfile))
def count ( args ) : from bitarray import bitarray p = OptionParser ( count . __doc__ ) opts , args = p . parse_args ( args ) if len ( args ) != 2 : sys . exit ( not p . print_help ( ) ) fastafile , jfdb = args K = get_K ( jfdb ) cmd = "jellyfish query {0} -C | cut -d' ' -f 2" . format ( jfdb ) t = must_open ( "tmp" , "w" ) proc = Popen ( cmd , stdin = PIPE , stdout = t ) t . flush ( ) f = Fasta ( fastafile , lazy = True ) for name , rec in f . iteritems_ordered ( ) : kmers = list ( make_kmers ( rec . seq , K ) ) print ( "\n" . join ( kmers ) , file = proc . stdin ) proc . stdin . close ( ) logging . debug ( cmd ) proc . wait ( ) a = bitarray ( ) binfile = "." . join ( ( fastafile , jfdb , "bin" ) ) fw = open ( binfile , "w" ) t . seek ( 0 ) for row in t : c = row . strip ( ) a . append ( int ( c ) ) a . tofile ( fw ) logging . debug ( "Serialize {0} bits to `{1}`." . format ( len ( a ) , binfile ) ) fw . close ( ) sh ( "rm {0}" . format ( t . name ) ) logging . debug ( "Shared K-mers (K={0}) between `{1}` and `{2}` written to `{3}`." . format ( K , fastafile , jfdb , binfile ) ) cntfile = "." . join ( ( fastafile , jfdb , "cnt" ) ) bincount ( [ fastafile , binfile , "-o" , cntfile , "-K {0}" . format ( K ) ] ) logging . debug ( "Shared K-mer counts written to `{0}`." . format ( cntfile ) )
%prog count fastafile jf.db

    Run dump - jellyfish - bin - bincount in serial.