(ns cljam.util.sequence (:require [clojure.string :as cstr]) (:import [java.nio Buffer CharBuffer])) | |
(def ^:private revcomp-table
(let [ba (byte-array 128)]
(dotimes [i 128] (aset ba i (byte (int \N))))
(doseq [s ["AT" "GC" "NN"]
[a b] [(cstr/upper-case s) (cstr/lower-case s)]]
(aset ba (int a) (byte (int b)))
(aset ba (int b) (byte (int a))))
ba)) | |
Returns a reverse-complement sequence of given sequence. All characters other than ATGCNatgcn will be replaced with N. Masks will be kept. | (defn revcomp
[^String s]
(let [l (.length s)
cb (CharBuffer/allocate l)]
(dotimes [i l]
(->> (unchecked-dec (- l i))
(.charAt s)
unchecked-int
(aget ^bytes revcomp-table)
unchecked-char
(.put cb)))
(.flip ^Buffer cb)
(.toString cb))) |