;; (load "~/src/lsw/trunk/bug/iAF1261/ecocyc-ucsd-cpd-map.lisp") ;; (load "~/src/lsw/trunk/bug/iAF1261/rxns-with-unmapped-cpds.lisp") ;; (make-rxn-map-by-gene "~/src/lsw/trunk/bug/iAF1261/other-rxn-mappings-by-gene.txt" (get-rxns-of-blattners *rxns-with-unmapped-cpds*) *ecocyc-ucsd-cpds*) (defun print-comments-of-protein-by-blattner (unmatched-genes name) (format t "~A = {" name) (loop for rxn-genes in unmatched-genes for rxn = (first rxn-genes) for blattners = (second rxn-genes) do (loop for blattner in blattners for gene = (find-gene-by-blattner blattner) when (not (reactions-of-gene gene)) do (loop for product in (all-products-of-gene gene) do (format t "('~A', '~A') : \"\"\"~A\"\"\",~%" blattner rxn (get-slot-values product 'comment))))) (format t "}~%")) (defun print-ecocyc-rxns-and-comments-of-gene-to-python (ucsd-rxns-of-genes python-dir name) (tofile (format nil "~A/~A.py" python-dir name) (format t "~A = {" name) (loop for ucsd-rxns-of-gene in ucsd-rxns-of-genes for blattner = (first ucsd-rxns-of-gene) for gene = (find-gene-by-blattner blattner) for ucsd-rxns = (second ucsd-rxns-of-gene) do (format t "'~A' : {'ecocyc-rxns': {" blattner ) (loop for rxn in (reactions-of-gene gene) do (format t "\"\"\"~A\"\"\": \"\"\"~A\"\"\"," rxn (get-name-string rxn :rxn-eqn-as-name? t))) (format t "},'ucsd-rxns' : [") (loop for rxn in ucsd-rxns do (format t "'~A'," rxn)) (format t "], 'protein-comments' : [") (loop for product in (all-products-of-gene gene) do (format t "\"\"\"~A\"\"\"," (get-slot-values product 'comment ))) (format t "]},~%")) (format t "}~%"))) (defun print-reactions-of-protein-by-blattner (unmatched-genes ecocyc-ucsd-cpds) (format t "blattner ecogene ucsd-rxn ecocyc-rxn ecocyc-eqn ecocyc-substrates~%") (loop for rxn-genes in unmatched-genes for rxn = (first rxn-genes) for blattners = (second rxn-genes) do (loop for blattner in blattners for gene = (find-gene-by-blattner blattner) when (reactions-of-gene gene) do (loop for ecocyc-rxn in (reactions-of-gene gene) do (format t "~A ~A ~A ~A ~A ~{~A,~}~%" blattner gene rxn ecocyc-rxn (get-name-string ecocyc-rxn :strip-html? t) (get-ucsd-cpds (substrates-of-reaction ecocyc-rxn) ecocyc-ucsd-cpds)))))) (defun find-gene (gene) (get-substring-matches '|Genes| gene)) (defun find-gene-by-blattner (blattner) (let ((gene (find-gene blattner))) (if gene (caar gene)))) (defun make-rxn-map-by-gene (filename rxns-of-genes ecocyc-ucsd-cpds) (tofile filename (progn (format t "blattner ecogene ucsd-rxn ecocyc-rxn ecocyc-eqn ecocyc-substrates~%") (loop for entries in rxns-of-genes do (loop for entry in entries for blattner = (first entry) for ecogene = (second entry) for ucsd-rxn = (third entry) for biocyc-rxns = (fourth entry) when biocyc-rxns do (loop for rxn in biocyc-rxns for rxn-frame = (first rxn) for substrates = (second rxn) for rxn-eqn = (third rxn) do (format t "~A ~A ~A ~A ~A ~{~A,~}~%" blattner ecogene ucsd-rxn rxn-frame rxn-eqn (mapcar #'(lambda (x) (if (gethash x ecocyc-ucsd-cpds) (gethash x ecocyc-ucsd-cpds) x)) substrates)))))))) (defun get-ucsd-cpds (substrates ecocyc-ucsd-cpds) (loop for substrate in substrates collect (if (gethash substrate ecocyc-ucsd-cpds) (gethash substrate ecocyc-ucsd-cpds) substrate))) (defun get-rxns-of-blattners (unmatched-genes) (loop for unmatched-gene in unmatched-genes for ucsd-rxn = (first unmatched-gene) for blattners = (second unmatched-gene) collect (loop for blattner in blattners for gene = (find-gene-by-blattner blattner) when gene collect (list blattner gene ucsd-rxn (loop for rxn in (reactions-of-gene gene) collect (list rxn (substrates-of-reaction rxn) (get-name-string rxn :rxn-eqn-as-name? t :strip-html? t))))))) (defun match-rxns-by-gene (lispdir category genes-of-ucsd-rxn ecocyc-ucsd-cpds) (tofile (format nil "~A/~A-ecocyc-rxns-of-gene.txt" lispdir category) (print-reactions-of-protein-by-blattner genes-of-ucsd-rxn ecocyc-ucsd-cpds)) (tofile (format nil "~A/~A-ecocyc-comments-of-gene.py" lispdir category) (print-comments-of-protein-by-blattner genes-of-ucsd-rxn (format nil "~A_ecocyc_comments_of_gene" category))))