2007-09-20 18:09:08 -04:00
|
|
|
USING: io io.files io.streams.duplex kernel sequences
|
|
|
|
sequences.private strings vectors words memoize splitting
|
2008-06-09 06:22:21 -04:00
|
|
|
grouping hints unicode.case continuations io.encodings.ascii ;
|
2007-09-20 18:09:08 -04:00
|
|
|
IN: benchmark.reverse-complement
|
|
|
|
|
|
|
|
MEMO: trans-map ( -- str )
|
|
|
|
256 >string
|
|
|
|
"TGCAAKYRMBDHV" "ACGTUMRYKVHDB"
|
|
|
|
[ pick set-nth ] 2each ;
|
|
|
|
|
|
|
|
: do-trans-map ( str -- )
|
|
|
|
[ ch>upper trans-map nth ] change-each ;
|
|
|
|
|
|
|
|
HINTS: do-trans-map string ;
|
|
|
|
|
|
|
|
: translate-seq ( seq -- str )
|
|
|
|
concat dup reverse-here dup do-trans-map ;
|
|
|
|
|
|
|
|
: show-seq ( seq -- )
|
|
|
|
translate-seq 60 <groups> [ print ] each ;
|
|
|
|
|
|
|
|
: do-line ( seq line -- seq )
|
|
|
|
dup first ">;" memq? [
|
|
|
|
over show-seq print dup delete-all
|
|
|
|
] [
|
|
|
|
over push
|
|
|
|
] if ;
|
|
|
|
|
2007-12-08 17:47:39 -05:00
|
|
|
HINTS: do-line vector string ;
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
: (reverse-complement) ( seq -- )
|
|
|
|
readln [ do-line (reverse-complement) ] [ show-seq ] if* ;
|
|
|
|
|
|
|
|
: reverse-complement ( infile outfile -- )
|
2008-05-05 03:19:25 -04:00
|
|
|
ascii [
|
|
|
|
ascii [
|
|
|
|
500000 <vector> (reverse-complement)
|
|
|
|
] with-file-reader
|
|
|
|
] with-file-writer ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-06-09 03:14:14 -04:00
|
|
|
: reverse-complement-in ( -- path )
|
2008-02-21 23:14:08 -05:00
|
|
|
"reverse-complement-in.txt" temp-file ;
|
2008-02-12 16:51:34 -05:00
|
|
|
|
2008-06-09 03:14:14 -04:00
|
|
|
: reverse-complement-out ( -- path )
|
2008-02-21 23:14:08 -05:00
|
|
|
"reverse-complement-out.txt" temp-file ;
|
2008-02-12 16:51:34 -05:00
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
: reverse-complement-main ( -- )
|
2008-02-12 16:51:34 -05:00
|
|
|
reverse-complement-in
|
|
|
|
reverse-complement-out
|
2007-09-20 18:09:08 -04:00
|
|
|
reverse-complement ;
|
|
|
|
|
|
|
|
MAIN: reverse-complement-main
|