stumpwm/bioinf.lisp @ 62e329839625
default tip
Merge
author |
Steve Losh <steve@stevelosh.com> |
date |
Wed, 27 Aug 2025 16:19:24 -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")