stumpwm/bioinf.lisp @ a65fd2691c94 default tip
More
| author | Steve Losh <steve@stevelosh.com> |
|---|---|
| date | Mon, 03 Nov 2025 14:55:17 -0500 |
| 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")