stumpwm/bioinf.lisp @ 87ff0514c83b

More
author Steve Losh <steve@stevelosh.com>
date Wed, 27 Aug 2025 16:17:11 -0400
parents 2e41ef790dc8
children (none)
(in-package :stumpwm-user)


(defun random-base ()
  (random-elt "GCAT"))

(defun random-dna-string (n)
  (let ((result (make-string n)))
    (dotimes (i n)
      (setf (char result i) (random-base)))
    result))

(defcommand random-dna (n) ((:integer "Length: "))
  (pbcopy (random-dna-string n)))

(defun random-fasta-string (entries entry-length)
  (str:join #\newline
            (loop :for i :from 0 :below entries
                  :collect (format nil ">seq ~D" i)
                  :collect (random-dna-string entry-length))))

(defcommand random-fasta
    (entries entry-length)
    ((:integer "Entries: ")
     (:integer "Entry Length: "))
  (check-type entries (integer 1 *))
  (check-type entry-length (integer 1 *))
  (pbcopy (random-fasta-string entries entry-length)))


(defun kmers-of (k seq)
  (loop :for start :from 0
        :for end :from k :to (length seq)
        :collect (subseq seq start end)))

(defun kmerized-string (k seq)
  (with-output-to-string (s)
    (loop :for i :from 0
          :for kmer :in (kmers-of k seq)
          :do (format s "~,,V,@A~%" i kmer))))

(defcommand kmerize (k) ((:integer "k: "))
  (pbcopy (kmerized-string k (pbpaste))))

(defun reverse-complement (seq)
  (nreverse (map 'string (lambda (base)
                           (case base
                             (#\A #\T)
                             (#\C #\G)
                             (#\G #\C)
                             (#\T #\A)
                             (#\N #\N)
                             (#\a #\t)
                             (#\c #\g)
                             (#\g #\c)
                             (#\t #\a)
                             (#\n #\n)
                             (t #\?)))
                 seq)))

(defcommand revcomp () ()
  (pbcopy (reverse-complement (pbpaste))))

(defcommand rev () ()
  (pbcopy (reverse (pbpaste))))


#; Scratch --------------------------------------------------------------------

(random-fasta-string 10 100)

(format nil "~,,99,@A" "hello")

(kmers-of 3 "ACTTAC")