]> gitweb.factorcode.org Git - factor.git/blob - extra/benchmark/reverse-complement/reverse-complement.factor
b6bddd3060c2b31b50b2e49bc09988cfdaab76f9
[factor.git] / extra / benchmark / reverse-complement / reverse-complement.factor
1 ! Copyright (C) 2006, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: io io.files io.files.temp io.streams.duplex kernel
4 sequences sequences.private strings vectors words memoize
5 splitting grouping hints tr continuations io.encodings.ascii
6 ascii ;
7 IN: benchmark.reverse-complement
8
9 TR: trans-map ch>upper "ACGTUMRYKVHDB" "TGCAAKYRMBDHV" ;
10
11 : translate-seq ( seq -- str )
12     concat reverse! dup trans-map-fast ;
13
14 : show-seq ( seq -- )
15     translate-seq 60 group [ print ] each ;
16
17 : do-line ( seq line -- seq )
18     dup first ">;" member-eq?
19     [ over show-seq print dup delete-all ] [ suffix! ] if ;
20
21 HINTS: do-line vector string ;
22
23 : reverse-complement ( infile outfile -- )
24     ascii [
25         ascii [
26             500,000 <vector>
27             [ do-line ] each-line
28             show-seq
29         ] with-file-reader
30     ] with-file-writer ;
31
32 : reverse-complement-in ( -- path )
33     "reverse-complement-in.txt" temp-file ;
34
35 : reverse-complement-out ( -- path )
36     "reverse-complement-out.txt" temp-file ;
37
38 : reverse-complement-benchmark ( -- )
39     reverse-complement-in
40     reverse-complement-out
41     reverse-complement ;
42
43 MAIN: reverse-complement-benchmark