stumpwm/bioinf.lisp @ 16331fb57509 default tip

More
author Steve Losh <steve@stevelosh.com>
date Wed, 05 Feb 2025 11:30:40 -0500
parents 46c8ae0df6cc
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))))


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

(random-fasta-string 10 100)

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

(kmers-of 3 "ACTTAC")