From 19847389b9733e5bab84191c45792dca5bdb208f Mon Sep 17 00:00:00 2001 From: pablocarderam Date: Sun, 16 Jun 2024 07:59:42 -0400 Subject: [PATCH] Added pPC101 capabilities. --- README.md | 2 +- input/plasmids/ppc101-template.gb | 454 +++++++++++++++++++++++++ main.py | 4 +- py/genetargeter/GeneTargeterMethods.py | 16 +- py/genetargeter/constants.py | 7 + py/genetargeter/plasmidConstruction.py | 43 ++- static/js/{main_v1.js => main_v2.js} | 3 + templates/index.html | 3 +- 8 files changed, 523 insertions(+), 9 deletions(-) create mode 100644 input/plasmids/ppc101-template.gb rename static/js/{main_v1.js => main_v2.js} (99%) diff --git a/README.md b/README.md index d100c2a5..ff0e89ed 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ GeneTargeter creates custom gene-editing constructs designed for knock-out or conditional knock-down in [_Plasmodium falciparum_](http://www.who.int/mediacentre/factsheets/fs094/en/). It is developed by the [Niles Lab at MIT](http://web.mit.edu/nileslab/) and [described in detail in this article](https://www.liebertpub.com/doi/epdf/10.1089/crispr.2021.0069). -At the Niles Lab, GeneTargeter is used to deliver 3' or 5' UTR post-transcriptional regulatory element payload to a specific given gene ([Ganesan et al., 2016](https://dx.doi.org/10.1038%2Fncomms10727), [Nasamu et al., 2021](https://doi.org/10.1038/s41598-020-77644-4)). However, user-defined custom plasmids can be used as well. +At the Niles Lab, GeneTargeter is used to deliver 3' or 5' UTR post-transcriptional regulatory element payload to a specific given gene ([Ganesan et al., 2016](https://dx.doi.org/10.1038%2Fncomms10727), [Nasamu et al., 2021](https://doi.org/10.1038/s41598-020-77644-4)). It can also deliver 5' synthetic transcriptional regulatory payloads (preprint forthcoming). User-defined custom plasmids can be used as well. Most applications can be served well through the web application running at [genetargeter.mit.edu](genetargeter.mit.edu) . diff --git a/input/plasmids/ppc101-template.gb b/input/plasmids/ppc101-template.gb new file mode 100644 index 00000000..b4285c33 --- /dev/null +++ b/input/plasmids/ppc101-template.gb @@ -0,0 +1,454 @@ +LOCUS Template_plasmid_pPC10 18135 bp ds-DNA linear 25-JUN-2023 +DEFINITION . +ACCESSION urn.local...1375049453304.14 +VERSION urn.local...1375049453304.14 +COMMENT Imported using the Genbank importer. File name: + psn150_cas9_editedpcr.gb +FEATURES Location/Qualifiers + misc 10307..10352 + /label="SEQ 1" + /ApEinfo_revcolor="#b4abac" + /ApEinfo_fwdcolor="#b4abac" + misc_feature 10361..15606 + /label="Insert" + /ApEinfo_revcolor="#75c6a9" + /ApEinfo_fwdcolor="#75c6a9" + terminator complement(10603..11166) + /label="PfHRP2 3'UTR" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + CDS complement(11197..11592) + /label="BSD" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + CDS complement(11197..11592) + /label="Translation 11592-11197" + /translation="AKPLSQEESTLIERATATINSIPISEDYSVASAALSSDGRIFTGVNVYHFTGGPCAELVVLGTAAAAAAGNLTCIVAIGNENRGILSPCGRCRQVLLDLHPGIKAIVKDSDGQPTAVGIRELLPSGYVWEG*" + CDS complement(11593..11598) + /label="Translation 11598-11593" + /translation="AG" + CDS complement(11599..11661) + /label="T2as" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + CDS complement(11599..11661) + /label="Translation 11661-11599" + /translation="GSGEGRGSLLTCGDVEENPGP" + CDS complement(11662..12594) + /label="Renilla luciferase (RLuc)" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + CDS complement(11662..12594) + /label="Translation 12594-11662" + /translation="MTSKVYDPEQRKRMITGPQWWARCKQMNVLDSFINYYDSEKHAENAVIFLHGNAASSYLWRHVVPHIEPVARCIIPDLIGMGKSGKSGNGSYRLLDHYKYLTAWFELLNLPKKIIFVGHDWGACLAFHYSYEHQDKIKAIVHAESVVDVIESWDEWPDIEEDIALIKSEEGEKMVLENNFFVETMLPSKIMRKLEPEEFAAYLEPFKEKGEVRRPTLSWPREIPLVKGGKPDVVQIVRNYNAYLRASDDLPKMFIESDPGFFSNAIVEGAKKFPNTEFVKVKGLHFSQEDAPDEMGKYIKSFVERVLKNEQ" + CDS complement(12595..12657) + /label="T2a" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + CDS complement(12595..12657) + /label="Translation 12657-12595" + /translation="GSGEGRGSLLTCGDVEENPGP" + CDS complement(12658..12660) + /label="Translation 12660-12658" + /translation="P" + CDS complement(12661..13737) + /label="LacI" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + CDS complement(12661..13770) + /label="Translation 13770-12661" + /translation="MAPKKKRKVGSKPVTLYDVAEYAGVSYQTVSRVVNQASHVSAKTREKVEAAMAELNYIPNRVAQQLAGKQSLLIGVATSSLALHAPSQIVAAIKSRADQLGASVVVSMVERSGVEACKAAVHNLLAQRVSGLIINYPLDDQDAIAVEAACTNVPALFLDVSDQTPINSIIFSHEDGTRLGVEHLVALGHQQIALLAGPLSSVSARLRLAGWHKYLTRNQIQPIAEREGDWSAMSGFQQTMQMLNEGIVPTAMLVANDQMALGAMRAITESGLRVGADISVVGYDDTEDSSCYIPPLTTIKQDFRLLGQTSVDRLLQLSQGQAVKGNQLLPVSLVKRKTTLAPNTQTASPRALADSLMQLARQVSRLESGQ" + misc_feature complement(13741..13767) + /label="SV40 NLS" + /ApEinfo_revcolor="#faac61" + /ApEinfo_fwdcolor="#faac61" + promoter complement(13781..14650) + /label="PfHSP86 5'UTR" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + promoter 14659..15282 + /label="PfCAM 5'UTR" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + /ApEinfo_fwdcolor="#c7b0e3" + misc_feature 15303..15328 + /label="lacO (WT)" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature 15337..15362 + /label="lacO (var)" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + misc_feature 15373..15398 + /label="lacO (var)" + /ApEinfo_revcolor="#d59687" + /ApEinfo_fwdcolor="#d59687" + misc_feature 15408..15433 + /label="lacO (var)" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature 15461..15486 + /label="lacO (var)" + /ApEinfo_revcolor="#84b0dc" + /ApEinfo_fwdcolor="#84b0dc" + misc_feature 15496..15521 + /label="lacO (var)" + /ApEinfo_revcolor="#d6b295" + /ApEinfo_fwdcolor="#d6b295" + misc_feature 15530..15555 + /label="lacO (var)" + /ApEinfo_revcolor="#c7b0e3" + /ApEinfo_fwdcolor="#c7b0e3" + misc_feature 15563..15582 + /label="Osys (symmetric lacO)" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" + misc_feature 15563..15588 + /label="lacO" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + promoter 15621..15637 + /label="T7 promoter" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" + /note="ApEinfo_revcolor: #BBBBBB" + misc_feature 15640..15659 + /label="PF3D7_1222600.1 gRNA" + /ApEinfo_revcolor="#faac61" + /ApEinfo_fwdcolor="#faac61" + /note="ApEinfo_revcolor: #E69F00" + misc_feature 15660..15735 + /label="sgRNA scaffold" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" + /note="ApEinfo_revcolor: #BBBBBB" + terminator 15736..15772 + /label="T7 terminator (edited)" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" + /note="ApEinfo_revcolor: #BBBBBB" + misc_feature 15862..15968 + /label="2x attP" + /ApEinfo_revcolor="#b4abac" + /ApEinfo_fwdcolor="#b4abac" + misc_feature 15969..16091 + /label="SEQ3-(I-SceI)-SEQX" + /ApEinfo_revcolor="#faac61" + /ApEinfo_fwdcolor="#faac61" + misc 15983..16027 + /label="SEQ 3" + /ApEinfo_revcolor="#b4abac" + /ApEinfo_fwdcolor="#b4abac" + misc 16028..16045 + /label="I-Sce1 site" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" + Misc 16046..16091 + /label="SEQ X" + /ApEinfo_revcolor="#b4abac" + /ApEinfo_fwdcolor="#b4abac" +ORIGIN + 1 gcgtataatg gactattgtg tgctgataag gagaacataa gcgcagaaca atatgtatct + 61 attccggtgt tgtgttcctt tgttattctg ctattatgtt ctcttatagt gtgacgaaag + 121 cagcataatt aatcgtcact tgttctttga ttgtgttacg atatccagag acttagaaac + 181 gggggaaccg ggatgagcaa ggtaaaaatc ggtgagttga tcaacacgct tgtgaatgag + 241 gtagaggcaa ttgatgcctc agaccgccca caaggcgaca aaacgaagag aattaaagcc + 301 gcagccgcac ggtataagaa cgcgttattt aatgataaaa gaaagttccg tgggaaagga + 361 ttgcagaaaa gaataaccgc gaatactttt aacgcctata tgagcagggc aagaaagcgg + 421 tttgatgata aattacatca tagctttgat aaaaatatta ataaattatc ggaaaagtat + 481 cctctttaca gcgaagaatt atcttcatgg ctttctatgc ctacggctaa tattcgccag + 541 cacatgtcat cgttacaatc taaattgaaa gaaataatgc cgcttgccga agagttatca + 601 aatgtaagaa taggctctaa aggcagtgat gcaaaaatag caagactaat aaaaaaatat + 661 ccagattgga gttttgctct tagtgattta aacagtgatg attggaagga gcgccgtgac + 721 tatctttata agttattcca acaaggctct gcgttgttag aagaactaca ccagctcaag + 781 gtcaaccatg aggttctgta ccatctgcag ctaagccctg cggagcgtac atctatacag + 841 caacgatggg ccgatgttct gcgcgagaag aagcgtaatg ttgtggttat tgactaccca + 901 acatacatgc agtctatcta tgatattttg aataatcctg cgactttatt tagtttaaac + 961 actcgttctg gaatggcacc tttggccttt gctctggctg cggtatcagg gcgaagaatg + 1021 attgagataa tgtttcaggg tgaatttgcc gtttcaggaa agtatacggt taatttctca + 1081 gggcaagcta aaaaacgctc tgaagataaa agcgtaacca gaacgattta tactttatgc + 1141 gaagcaaaat tattcgttga attattaaca gaattgcgtt cttgctctgc tgcatctgat + 1201 ttcgatgagg ttgttaaagg atatggaaag gatgatacaa ggtctgagaa cggcaggata + 1261 aatgctattt tagcaaaagc atttaaccct tgggttaaat catttttcgg cgatgaccgt + 1321 cgtgtttata aagatagccg cgctatttac gctcgcatcg cttatgagat gttcttccgc + 1381 gtcgatccac ggtggaaaaa cgtcgacgag gatgtgttct tcatggagat tctcggacac + 1441 gacgatgaga acacccagct gcactataag cagttcaagc tggccaactt ctccagaacc + 1501 tggcgacctg aagttgggga tgaaaacacc aggctggtgg ctctgcagaa actggacgat + 1561 gaaatgccag gctttgccag aggtgacgct ggcgtccgtc tccatgaaac cgttaagcag + 1621 ctggtggagc aggacccatc agcaaaaata accaacagca ctctccgggc ctttaaattt + 1681 agcccgacga tgattagccg gtacctggag tttgccgctg atgcattggg gcagttcgtt + 1741 ggcgagaacg ggcagtggca gctgaagata gagacacctg caatcgtcct gcctgatgaa + 1801 gaatccgttg agaccatcga cgaaccggat gatgagtccc aagacgacga gctggatgaa + 1861 gatgaaattg agctcgacga gggtggcggc gatgaaccaa ccgaagagga agggccagaa + 1921 gaacatcagc caactgctct aaaacccgtc ttcaagcctg caaaaaataa cggggacgga + 1981 acgtacaaga tagagtttga atacgatgga aagcattatg cctggtccgg ccccgccgat + 2041 agccctatgg ccgcaatgcg atccgcatgg gaaacgtact acagctaaaa gaaaagccac + 2101 cggtgttaat cggtggcttt tttattgagg cctgtcccta cccatcccct gcaagggacg + 2161 gaaggattag gcggaaactg cagctgcaac tacggacatc gccgtcccga ctgcagggac + 2221 ttccccgcgt aaagcggggc ttaaattcgg gctggccaac cctatttttc tgcaatcgct + 2281 ggcgatgtta gtttcgtgga tagcgtttcc agcttttcaa tggccagctc aaaatgtgct + 2341 ggcagcacct tctccagttc cgtatcaata tcggtgatcg gcagctctcc acaagacata + 2401 ctccggcgac cgccacgaac tacatcgcgc agcagctccc gttcgtagac acgcatgttg + 2461 cccagagccg tttctgcagc cgttaatatc cggcgcagct cggcgatgat tgccgggaga + 2521 tcatccacgg ttattgggtt cggtgatggg ttcctgcagg cgcggcggag agccatccag + 2581 acgccgctaa cccatgcgtt acggtactga aaactttgtg ctatgtcgtt tatcaggccc + 2641 cgaagttctt ctttctgccg ccagtccagt ggttcaccgg cgttcttagg ctcaggctcg + 2701 acaaaagcat actcgccgtt tttccggata gctggcagaa cctcgttcgt cacccacttg + 2761 cggaaccgcc aggctgtcgt cccctgtttc accgcgtcgc ggcagcggag gattatggtg + 2821 tagagaccag attccgatac cacatttact tccctggcca tccgatcaag tttttgtgcc + 2881 tcggttaaac cgagggtcaa tttttcatca tgatccagct tacgcaatgc atcagaaggg + 2941 ttggctatat tcaatgcagc acagatatcc agcgccacaa accacgggtc accaccgaca + 3001 agaaccaccc gtatagggtg gctttcctga aatgaaaaga cggagagagc cttcattgcg + 3061 cctccccgga tttcagctgc tcagaaaggg acagggagca gccgcgagct tcctgcgtga + 3121 gttcgcgcgc gacctgcaga agttccgcag cttcctgcaa atacagcgtg gcctcataac + 3181 tggagatagt gcggtgagca gagcccacaa gcgcttcaac ctgcagcagg cgttcctcaa + 3241 tcgtctccag caggccctgg gcgtttaact gaatctggtt catgcgatca cctcgctgac + 3301 cgggatacgg gctgacagaa cgaggacaaa acggctggcg aactggcgac gagcttctcg + 3361 ctcggatgat gcaatggtgg aaaggcggtg gatatgggat tttttgtccg tgcggacgac + 3421 agctgcaaat ttgaatttga acatggtatg cattcctatc ttgtataggg tgctaccacc + 3481 agagttgaga atctctatag gggtggtagc ccagacaggg ttctcaacac cggtacaaga + 3541 agaaaccggc ccaaccgaag ttggccccat ctgagccacc ataattcagg tatgcgcaga + 3601 tttaacacac aaaaaaacac gctggcgcgt gttgtgcgct tcttgtcatt cggggttgag + 3661 aggcccggct gcagattttg ctgcagcggg gtaactctac cgccaaagca gaacgcacgt + 3721 caataattta ggtggatatt ttaccccgtg accagtcacg tgcacaggtg tttttatagt + 3781 ttgctttact gactgatcag aacctgatca gttattggag tccggtaatc ttattgatga + 3841 ccgcagccac cttagatgtt gtctcaaacc ccatacggcc acgaatgagc cactggaacg + 3901 gaatagtcag caggtacagc ggaacgaacc acaaacggtt cagacgctgc cagaacgtcg + 3961 catcacgacg ttccatccat tcggtattgt cgacgacctg gtaagcgtat tgtcctggcg + 4021 tttttgctgc ttccgagtag caatcctctt caccacaaag aaagttactt atctgcttcc + 4081 agttttcgaa cccttcttct ttgagccgct tttccagctc attcctccac aaaacaggca + 4141 cccatcctct gcgataaatc atgattattt gtcctttaaa taaggctgta gaactgcaaa + 4201 atcgctctcg ttcacatgct gtacgtagat gcgtagcaaa ttgccgttcc atccctgtaa + 4261 tccaccttct ttggaaagat cgtccttgac ctcacgaaga accttatcca atagccctgc + 4321 ggcacaagaa attgcctgct ctggatcagc aaattcatat tgattaatag gtgattgcca + 4381 cacaccaaaa acaggaatca tcttttcggc taaacgcctc tcctgttctt tcttaatctc + 4441 aagttgtaag cggaccagct caccatccat cattttttgt agatcatgcg ccactattca + 4501 cccccactgg ccatcagcaa ataaagcttc atactcggac accggcaggc ggcttccacg + 4561 gattgaaagg tcaagccaac cacgtccaga tgggtcagcc ttatccgatt cttcccaccg + 4621 ttctgcagct gtagcaacca ggcattctac cgccttcatg tagtcttctg tacggaacca + 4681 gccgtagtta atgccaccat cagtaactgc ccaggccatc tttttctctt cggcctcaat + 4741 agcccggatg cggttatcgc acagctcgcg acagtacttc agctgttcgt aatccagttg + 4801 cttcaggaac tctggtgtcg acgtcatagt ggcttcacct tataggcttt tagaagcgcc + 4861 ctggcttcgt ctgtgtggtc ttccatgctc ttatcgctgg caatgcagca ataaactccc + 4921 tcactatctg agaacccgtt catccgaatg atcgtgaatg gaagttcccg gccagtttta + 4981 taatcgctat agcttgtcgc gtcgtggctg accttgacca cataagggtc gtagccctcc + 5041 acgatgacaa ggcattcccg ttgttttccc attacccctc cggttatatc gccacggctt + 5101 gccgctggct tagaaacgct ttcagcagcc ttatttcgcg tactgatagc aggtccataa + 5161 attcggtcat gtacagcgag gcgaacgttc tcgcgatgct ggccactggc cacaggcgta + 5221 ccgcctccat ttcggttgct ggcaacgcgt tctccgccca cgcctccggt accgccaccg + 5281 ggatagcctc cagtgcctgg ataattactg attgtggggc gtccggaacg tgctctgttt + 5341 tggatcgagg gttaccatgt atatctatat ttagatccaa atcgcgatcc acttcgatgg + 5401 tggttttttc caccttacgt gcgtgaattg ataaaccggc ctcgcggcgc ttctccacga + 5461 tattcatgag gaactcgacc gagtccgggt caatggaacg catcgtgggg cgtgcatcgc + 5521 cgtctctggc gcgtctggtc ttactggata gccccataga ctccaggatg cctatgcaga + 5581 ggtctgcagg cgctttcttc ttgcctttct ctgtgttgaa gccgccgatg cgtaaaacgt + 5641 tgtttagcag atcgcgccgt tccggcgtga gcaggttatc tctggcgcgt ttgagggcgt + 5701 ccatgtctgc ttcaccttcc agggtttttg gatcgatacc gcagtcgcgg aagtactgct + 5761 gcagcgtcgc cgatttgagg gtgtagaaac cacgcatgcc tatctcaaca gcaggggtcg + 5821 atttcactcg gtaatcggtt atggccggga atttagcctg gaactctgcg tcggcctgtt + 5881 cccgcgtcat ggccgtagtg acgaactgct gccatcttcc ggcaacgcga taagcgtagg + 5941 taaagtgaat caacgcttct tcacggtcaa ggcgacgggc ggttatctca tccagctgca + 6001 tggtttcaaa caggcgcact tttttcaggc cgccgtcgaa atagaatttt aacgccacct + 6061 cgtcgacatc cagctgcagc tccttttcga tgtcccagcg gaccagctgg gcctgctcat + 6121 ccagggacag ggtgcgtttt tttatcaact catcgtgttc ggcctggtca ggagtatcga + 6181 cactcaggtg gcgctccata agctgctcaa agaccagttc acgggcttct ttacgtaaat + 6241 ccttaccgat gctgtttgca agcgcgtcgg tggccatagg cgcgacctga tagccatcat + 6301 catgcatgat gcaaatcatg ttgctggcat aatcatttct ggccgatgcc tcgagcgcgg + 6361 cggctttaat tttgagctgc atgaatgaag agttagccac gccgagtgaa attcggtcac + 6421 cgtcaaagac aacgtctgtc agcagcccgg agtggccagc cgtttcgagc aaggcctgcg + 6481 cgtaggcgcg tttgattttt tccggatcgg tttcacgttt accgcgaagc ttgtcgaaac + 6541 cgataatgta ttcctgagct gtacggtcgc ggcgcagcat ctggatggcg tcgctgggga + 6601 ccacttcgcc gcagaacatg ccgaaatggc ggtggaagtg tttctcctca atcgatacac + 6661 ctgaagatat cgacgggctg tagatgaggc cgtcatattt tttcaccatc actttaggct + 6721 ggttggtgaa atcgtcgact tccttctcct gtttgttttt ctggttaacg cagagaaact + 6781 ttttgtcagg gaactgtagt ctcagctgca tggtaacgtc ttcggcgaac gtcgaactgt + 6841 cggtggccag catgattcgt tcgccgcgtt gcactgcagc gataacctcg gtcatgatcc + 6901 gatttttctc ggtataaaat acgcggatag gcttgttggt ttcgcggttg cgaacgtcga + 6961 ccgggagttc aatcacgtga atttgcagcc aggcaggtag gcccagctcc tcgcgtcgct + 7021 tcatcgccag ttcagccagg tcaacaagca gatcgttggc atcggcatcc accataatgg + 7081 catgctcttc agtacgcgcc agcgcgtcga taagcgtgtt gaatacgcct accgggtttt + 7141 ccatcgcacg cccggccaga atggcacgca ggccctgtgt tgcttcatcg aagccgaaga + 7201 agtcatgctg gcgcatcagc ggttgccagc agcctttaag tatggagttg atgcaaatag + 7261 tcagcttgtt ggcatatggc gccatttcct gatagccggg atcctgataa tgcagaatgt + 7321 cggctttcgc gcctttccct tcggtcatca tttcatgcag gccgcctatc agggatacgc + 7381 ggtgcgcgac ggaaacgcca cgcgtggact gcagcatcag tggacgcagg aggcctgtcg + 7441 atttacccga ccccatcccg gcgcggacaa taacgatgcc ctgcagctgt gcggcgtatg + 7501 tcatcacctc atcggtcatc ctggaggttt caaaccgttt gtaagtgatg tgtgacgggc + 7561 gaaggttcgg gttggtgatg cgttcactga acgaacgtga tgtttgcgcg gcacggcatt + 7621 tgcgattcaa ccggcgcgta atgtgatctt taacggtacc gttataaatt tctgcgatac + 7681 ccatatcccg cagcgtgctg ctgaaaaggc gcataagttc tttcgggctg tttggtaccg + 7741 ggcatgtcag catgccaata tcaacggcgc gaagcagttc tttggcaaaa gtgcgtctgt + 7801 tcagacgcgg gagagtacgc agcttattca gcgtgatcga caacagatcg gttgcacggc + 7861 tcagatgatt tctcgttaac tggcgagcga cttccttcag ccctctcagg ctgtgcaggt + 7921 cgttaaaatc gctgcattcc agctcagggt catcctcaaa agttgggtaa acacatttga + 7981 cgccggaaaa cttctccatg atgtcgaatc cggtgcggag gcctgtgttg ccttttcctt + 8041 cagctgagga tttgcggtcg ttatcgagag cgcaagtgat ttgcgcagcc gggtacatgt + 8101 tcaccagctg ctcgacaacg tgaatcatgt tgttagcgga aaccgcaatg actaccgcgt + 8161 caaagcgttt tttcgggtcg tttctggtcg ccagccagat ggatgccccg gtggcgaaac + 8221 cctctgcagt cgcaattttt tgcgccccct gcaggtcgcc aataacaaag catgcaccga + 8281 cgaaatcacc gttagtgatg gcgctggtct ggaacttgcc accattcaga tcgatacgtt + 8341 gccagccaac aatccgcccg tcttttcttc cgtccaggtg ggacagaggt atcgccatgt + 8401 aagttgttgg tccacggctc catttcgcac tgtcgtgact ggtcacgcga cgtatatcac + 8461 aagcgccaaa tacgtcacga attccctttt ttaccgcata aggccaggag ccatcttcag + 8521 ctggcgaatg ttcccaggcg cgatggaaag ccaaccatcc aagcaggcgt tcctgctcca + 8581 tctgattgtt ttttaaatca ttaacgcgtt gttgttcagc tcggaggcgg cgtgcttcag + 8641 cctggcgctc catgcgtgca cgttcttctt ccggctgagc gaccacggtc gcaccattcc + 8701 gttgctgttc acggcgatac tccgaaaaca ggaatgaaaa gccactccag gagccagcgt + 8761 catgcgcttt ttcaacgaag ttaacgaaag gataactgat gccatccttg ctctgctcaa + 8821 ggcgtgaata gatttccaca cggcctttaa ggctcttctg cagagcttcc ggggaggaat + 8881 tattgtaggt ggtatagcgc tctacaccac cgcgcggatt gagctgaatc ttatcagcac + 8941 acgcaggcca gttgataccg gccatcttcg ccagctcagt cagctcatca cgtgccgcgt + 9001 caagcagtga aaacggatcg ctgccaaagc gctccgcgta gaattcttgt aaggtcattt + 9061 tttagccttt ccatgcgaat tagcattttt tcgggttgaa aaaatccgca ggagcagcca + 9121 caataaacgc actatctttc tgaaggacgt atctgcgtta tcgtggctac ttcctgaaaa + 9181 aggcccgagt ttgccgactc gggttttttt tcgtcttttt tcggctgcta cggtctggtt + 9241 caaccccgac aaagtataga tcggattaaa ccagaattat agtcagcaat aaaccctgtt + 9301 attgtatcat ctaccctcaa ccatgaacga tttgatcgta ccgactactt ggtgcacaaa + 9361 ttgaagatca cttttatcat ggataacccg ttgagagtta gcactatcaa ggtagtaatg + 9421 ctgctcgtca taacgggcta atcgttgaat tgtgatctcg ccgttattat cacaaaccag + 9481 tacatcctca cccggtacaa gcgtaagtga agaatcgacc aggataacgt ctcccggctg + 9541 gtagtttcgc tgaatctggt tcccgaccgt cagtgcgtaa acggtgttcc gttgactcac + 9601 gaacggcagg aatcgctctg tgttggcagg ttctccaggc tgccagtctc tatccggtcc + 9661 ggtctctgtc gtaccaataa caggaacgcg gtctggatca gattcagtgc catacagtat + 9721 ccattgcacg ggcttacgca ggcattttgc cagcgatagc ccgatctcca gcgacggcat + 9781 cacgtcgcca cgttctaagt tttggacgcc cggaagagag attcctacag cttctgccac + 9841 ttgcttcagc gtcagtttca gctctaaacg gcgtgctttc agtcgttcgc ctcgtgtttt + 9901 cataccctta atcataaatg atctctttat agctggctat aatttttata aattatacct + 9961 agctttaatt ttcacttatt gattataata atccccatga aacccgaaga acttgtgcgc + 10021 catttcggcg atgtggaaaa agcagcggtt ggcgtgggcg tgacacccgg cgcagtctat + 10081 caatggctgc aagctgggga gattccacct ctacgacaaa gcgatataga ggtccgtacc + 10141 gcgtacaaat taaagagtga tttcacctct cagcgcatgg gtaaggaagg gcataacagg + 10201 ggatcctcta gacgcagaaa ggcccacccg aaggtgagcc agtgtgatta catttgcggc + 10261 ctaactgtgg ccagtccagt tacgctggag tcactagtgc ggccgccggt ttaccgagct + 10321 cttattggtt ttcaaacttc attgactgtg ccggccggcc gacaataaaa agattcttgt + 10381 tttcaagaac ttgtcatttg tatagttttt ttatattgta gttgttctat tttaatcaaa + 10441 tgttagcgtg atttatattt tttttcgcct cgacatcatc tgcccagatg cgaagttaag + 10501 tgcgcagaaa gtaatatcat gcgtcaatcg tatgtgaatg ctggtcgcta tactgctgtc + 10561 gattcgatac taacgccgcc atccagtgtc gaaaacgagc tcggtacctc tagatgtaat + 10621 aaatatgttc ttatatataa tgagaaataa atatttaaca tatgtttaaa aagaaaaatt + 10681 taagatttac atgattagga ataaaaatat taaaagctat atattaatgt tgtactttat + 10741 gttcatattg taaaagataa atataatttt tattaaaatt tatattatta ttattataag + 10801 ttcttagaaa atacattttg ttttaaaata atactataaa aagaacaata ataaaaataa + 10861 aataaataca attaaaacat aattaaaaaa gaaaatacag acagtaaaaa aaatcgctat + 10921 cccataaatt acaaaacatg aattaataaa catatattgt ttattaataa aattgtaagt + 10981 tatttttata tatacataat aaattaaaga tactgaaaca ataattttaa atgtaaataa + 11041 atgaataatg atatgtttta tatgattcat tattctatat ttataaggaa gattacaaaa + 11101 aaaaaattca tatgtatttt ttttgtaatt tctgtgttta tgtttttatt tttataatat + 11161 ttttaatcta ttattaaata aatttaatgg accggtttag ccctcccaca cataaccaga + 11221 gggcagcaat tcacgaatcc caactgccgt cggctgtcca tcactgtcct tcactatggc + 11281 tttgatccca ggatgcagat cgagaagcac ctgtcggcac cgtccgcagg ggctcaagat + 11341 gcccctgttc tcatttccga tcgcgacgat acaagtcagg ttgccagctg ccgcagcagc + 11401 agcagtgccc agcaccacga gttctgcaca aggtccccca gtaaaatgat atacattgac + 11461 accagtgaag atgcggccgt cgctagagag agctgcgctg gcgacgctgt agtcttcaga + 11521 gatggggatg ctgttgattg tagccgttgc tctttcaatg agggtggatt cttcttgaga + 11581 caaaggcttg gcgccggctg gtcctggatt ttcttctaca tctccacatg ttaataaact + 11641 tcctcttcct tctccacttc cttgttcatt tttgagaact cgctcaacga acgatttgat + 11701 atattttccc atttcatcag gtgcatcttc ttgcgaaaaa tgaagacctt ttactttgac + 11761 aaattcagta ttaggaaact tcttggcacc ttcaacaata gcattggaaa agaatcctgg + 11821 gtccgattca ataaacattt ttggtaaatc atcacttgca cgtagataag cattataatt + 11881 cctaacaatt tgtacaacgt caggtttacc accttttact aacgggattt cacgaggcca + 11941 tgataatgtt ggacgacgaa cttcaccttt ctctttgaat ggttcaagat atgctgcaaa + 12001 ttcttctggt tctaactttc tcatgatttt tgatggcaac atggtttcca cgaagaagtt + 12061 attctccaaa accatttttt ctccttcttc agatttgatc aacgcaatat cttcttcaat + 12121 atcaggccat tcatcccatg attcaatcac atctactaca ctttcagcgt gaactattgc + 12181 tttgatctta tcttgatgct catagctata atgaaatgcc aaacaagcac cccaatcatg + 12241 gccgacaaaa atgatcttct ttggtaaatt aagaagttca aaccatgcag taagatattt + 12301 gtaatgatca agtaacctat aagaaccatt accagatttg cctgatttgc ccataccaat + 12361 aaggtctggt ataatacacc gcgctactgg ctcaatatgt ggcacaacat gtcgccataa + 12421 ataagaagag gccgcgttac catgtaaaaa aataacagca ttttctgcat gtttttctga + 12481 atcataataa ttaataaatg aatcaagaac attcatttgt ttacatctgg cccaccactg + 12541 cggaccagtt atcatccgtt tcctttgttc tggatcataa actttcgaag tcattggacc + 12601 tggattttct tcaacatcac cacatgttaa taatgatcct ctaccttcac cactcccggg + 12661 ctgcccgctt tccagtcggg aaacctgtcg tgccagctgc attaatgaat cggccaacgc + 12721 gcggggagag gcggtttgcg tattgggagc cagggtggtt tttcttttca ccagtgagac + 12781 gggcaacagc tgattgccct tcaccgcctg gccctgagag agttgcagca agcggtccac + 12841 gctggtttgc cccagcaggc gaaaatcctg tttgatggtg gtcaacggcg ggatataaca + 12901 tgagctgtct tcggtatcgt cgtatcccac taccgaaata tccgcaccaa cgcgcagccc + 12961 ggactcggta atggcacgca tagcgcccag cgccatctga tcgttggcaa ccagcatcgc + 13021 agtgggaacg atgccctcat tcagcatttg catggtttgt tgaaaaccgg acatggcact + 13081 ccagtcacct tcccgttccg ctatcggctg aatttgattg cgagtgagat atttatgcca + 13141 gccagccaga cgcagacgcg ctgagacaga acttaatgga cccgctaaca gcgcgatttg + 13201 ctggtgtccc aatgcgacca gatgctccac gcccagtcgc gtaccgtctt catgggagaa + 13261 aataatactg ttgatgggtg tctggtcaga gacatcaaga aataacgccg gaacattagt + 13321 gcaggcagct tccacagcaa tagcatcctg gtcatccagc ggatagttaa tgatcagccc + 13381 actgacacgt tgcgcgagaa gattgtgaac cgccgcttta caggcttcga cgccgcttcg + 13441 ttctaccatc gacaccacca cgctggcacc cagttgatcg gcgcgagatt taatcgccgc + 13501 gacaatttgc gacggcgcgt gcagggccag actggaggtg gcaacgccaa tcagcaacga + 13561 ctgtttgccc gccagttgtt gtgccacgcg gttgggaatg taattcagct ccgccatcgc + 13621 cgcttccact ttttcccgcg ttttcgcaga aacgtggctg gcctggttca ccacgcggga + 13681 aacggtctga taagagacac cggcatactc agcgacatcg tataacgtaa ctggtttgga + 13741 tccgaccttc cgcttcttct ttggggccat ttttcctagg tttattcgaa atgtgggaag + 13801 aaaaaaaata taataaaaaa ggaaaatttc tttttaaagt aaaatattta tgtaaatatt + 13861 tatatatttt attatatata tattattata tatatatata tatatatata taccaataaa + 13921 ataatataaa aatttttatg tatatctaaa aatatgtttt tattaaaagg taaaaataaa + 13981 cttatttttt cttttttttt aaaaaatata tatatatata tatatatata tataatatta + 14041 tatgagatat atattaaata ttatattatt tatataaata taattttttt cttaatttct + 14101 cacgttgtta aaatttatat atttatatat gatatatatt ttttaatact ttttaatttt + 14161 ttttattatt tttggtaatt atcttatttt attttaattt tattatttta tattaaatga + 14221 tgctttttat tttatattat tattttttat ttaaaatttt tgctaaacat gaaattattt + 14281 tattatattt tgtaaataca aaataaaata atatataaat caaaaaaaaa aaaaaagaaa + 14341 gaaagaaaga aagaaagaaa gaaacaaaga tgatatttaa aaaaaaaaag atattataaa + 14401 aatataatat tatatataaa atattatttt tatataaata tatttatata tttatatatt + 14461 tatatatatg tatatatata tatatatata tataggtata gtatttatta ttttgttata + 14521 tttatataat actccttttt gttatttttt tttttttttt ctttaaattc atgcaaaaat + 14581 ttactataat attattatat ttaactatat actatggaat actaaatata tatccaatgg + 14641 cccctttccg ggcgcgcctt atatgtgatt aattttatat attatcaatt tatatatttt + 14701 taaatgctta cttaattatc tttttttttt tttttttttt tttttcccct ctttttatat + 14761 taatttattt ttgaaaaaat tgatatatat atatatatat aatatatata tatacatgta + 14821 gtagtattaa acaatgtata atatatataa ataatatatt tatatatttc atttcaattt + 14881 taattttttt tggttttttt tttttttctt tttgtcatat ttaaaaaaaa ttatattcat + 14941 ataagttatg cattttttat aaacattatt caatatatgt ataatataat atatatatat + 15001 atattaatgt attattccaa tgtgcatgat aaaagaaaaa aataatattt ataaaaaaaa + 15061 agaaaaataa aacaaaaaaa gaaaaaaaaa aaaaaaaaaa aaaaaataca aaaataaata + 15121 atataattta taattatata ttcttgtcac aataaaaata tatatatata tatatatatt + 15181 tataatatgt atattttaaa ctagaaaagg aataactaat attttattta ttatcattca + 15241 agatttatat tttataataa taaataccta atagaaatat atcttaagcc gtctcccctg + 15301 ctAATTGTTA TCCGCTCACA ATTCCACATT AGTCATAATT GGTATTCGCT CACAATACCA + 15361 CAATATTACT TAAATTGTTA TACGCTCACA ATTCCTCACA TATCATAAAT TGGTATCCGC + 15421 TCACAATACC AATttaagAT TTATATTATC TCGATTAAAA AATTGGTATC CGCTCACAAT + 15481 TCCAATTTTT TTTAAAATTG TTATCCGCTC ACAATACCAC AGAACGTAAA ATTGGTATAC + 15541 GCTCACAATA CCACAATATA AAaattgtga gcgctcacaa ttTCGACAcc ctgcccgctg + 15601 ctagaggcga tcgccgtacg taatacgact cactataggA GGGTATACAG GGATATCGAg + 15661 ttttagagct agaaatagca agttaaaata aggctagtcc gttatcaact tgaaaaagtg + 15721 gcaccgagtc ggtgctactc taaccccatc ggccgtctta ggggtttttt gtgcgatcgc + 15781 tcgacgccag ggttttccca gtcacgacgt tgtaaaacga cggccagtga attgtaatac + 15841 gactcactat agggcgaatt ctggtttgtc tggtcaacca ccgcggtctc agtggtgtac + 15901 ggtacaaacc cgaattctgg tttgtctggt caaccaccgc ggtctcagtg gtgtacggta + 15961 caaacccgga attcgagctc ggggtctaat acccaatctc tcgtcttatc cagatgtttt + 16021 atacgccatt accctgttat ccctaggtta ggcgactgtt ataacttacc tctgtaatac + 16081 tagtgatacc ggcggccgct tacaactgga ccttgctggt acatagaact gattaactga + 16141 ccatttaaat cataccaaca tggtcaaata aaacgaaagg ctcagtcgaa agactgggcc + 16201 tttcgtttta atctgatcgg cacgtaagag gttccaactt tcaccataat gaaataagat + 16261 cactaccggg cgtatttttt gagttatcga gattttcagg agctaaggaa gctaaaatgg + 16321 agaaaaaaat cactggatat accaccgttg atatatccca atggcatcgt aaagaacatt + 16381 ttgaggcatt tcagtcagtt gctcaatgta cctataacca gaccgttcag ctggatatta + 16441 cggccttttt aaagaccgta aagaaaaata agcacaagtt ttatccggcc tttattcaca + 16501 ttcttgcccg cctgatgaat gctcatccgg aatttcgtat ggcaatgaaa gacggtgagc + 16561 tggtgatatg ggatagtgtt cacccttgtt acaccgtttt ccatgagcaa actgaaacgt + 16621 tttcatcgct ctggagtgaa taccacgacg atttccggca gtttctacac atatattcgc + 16681 aagatgtggc gtgttacggt gaaaacctgg cctatttccc taaagggttt attgagaata + 16741 tgtttttcgt ctcagccaat ccctgggtga gtttcaccag ttttgattta aacgtggcca + 16801 atatggacaa cttcttcgcc cccgttttca ccatgggcaa atattatacg caaggcgaca + 16861 aggtgctgat gccgctggcg attcaggttc atcatgccgt ttgtgatggc ttccatgtcg + 16921 gcagaatgct taatgaatta caacagtact gcgatgagtg gcagggcggg gcgtaaccta + 16981 ggtgacagaa gtcaaaagcc tccggtcgga ggcttttgac tttctgctag atctgtttca + 17041 atgcggtgaa gggccaggca gctggggatt atgtcgagac ccggccagca tgttggtttt + 17101 atcgcatatt cagcgttgtc gcgtttaccc aggtaaaatg gaagcagtgt atcgtctgcg + 17161 tgaatgtgca aatcaggaac gtaaccgtgg tacatagatg cagtcccttg cgggtcgttc + 17221 ccttcaacga gtaggacgcg gtgcccttgc aaggctaacc attgcgcctg gtgtactgca + 17281 gatgaggttt tataaacccc tcccttgtgt gacataacgg aaagtacaac cgggttttta + 17341 tcgtcaggtc tttggtttgg gttaccaaac acactccgca tatggctaat ttggtcaatt + 17401 gtgtagccag cgcgacgttc tactcggccc ctcatctcaa aatcaggagc cggtagacga + 17461 ccagcttttt ccgcgtctct gatagcctgc ggtgttacgc cgatcaggtc tgcaacttct + 17521 gttatacccc agcggcgagt aatacgacgc gcttccgggc tgtcatcgcc gaactgtgcg + 17581 atggcaatag cgcgcgtcat ttcctgaccg cgattgatac agtctttcag caaattaatt + 17641 aacgacatcc tgtttcctct caaacatgcc cttatctttg tgtttttcat catactttac + 17701 gtttttaaag caaagcaaca taaaaaaagc aaagtgactt agaaaacgca aagttaaggt + 17761 tcaaatcaat tttttgatgc gctacagaag ctatttagct tcatctaagc gcaacggtat + 17821 tacttacgtt ggtatattta aaacctaact taatgatttt aaatgataat aaatcatacc + 17881 aattgctatc aaaagttaag cgaacatgct gattttcacg ctgtttatac actttgaggc + 17941 atctctatct cttccgtctc tatattgaaa cacaatcaaa gaacatcaat ccatgtgaca + 18001 tcccccacta tctaagaaca ccataacaga acacaacata ggaatgcaac attaatgtat + 18061 caataattcg gaacatatgc actatatcat atctcaatta cggaacatat cagcacacaa + 18121 ttgcccatta tacgc +// \ No newline at end of file diff --git a/main.py b/main.py index 6a631c01..8d938346 100755 --- a/main.py +++ b/main.py @@ -109,14 +109,14 @@ def gene_message(message): for gbName in geneGBs: # for every gb sigPep = chkSignalPeptide5Prime(gbName,signalPDB); # signalP info haTag = False; # don't use HA tags by default - if plasmidType == "pSN150" and ( haTagMsg == "Yes" or (haTagMsg == "Auto" and not sigPep) ): # if forcing HA tags or 5' end does not contain signal peptide and auto HA-tagging + if (plasmidType == "pSN150" or plasmidType == "pPC101") and ( haTagMsg == "Yes" or (haTagMsg == "Auto" and not sigPep) ): # if forcing HA tags or 5' end does not contain signal peptide and auto HA-tagging haTag = True; # use HA tags try: output = targetGene(gbName, geneGBs[gbName], codonOptimize=codonOptimize, useFileStrs=True, HRannotated=HRann,lengthLHR=lengthLHR, lengthRHR=lengthRHR, gibsonHomRange=lengthGib, optimRangeLHR=optimLHR, optimRangeRHR=optimRHR, endSizeLHR=endsLHR, endSizeRHR=endsRHR, endTempLHR=endTempLHR, endTempRHR=endTempRHR, gibTemp=gibTemp, gibTDif=gibTDif, maxDistLHR=maxDistLHR, maxDistRHR=maxDistRHR, minGBlockSize=minFragSize, maxGBlockSize=maxFragSize, codonSampling=codonSampling, minGRNAGCContent=minGRNAGCContent, onTargetMethod=onTargetMethod, minOnTargetScore=minOnTargetScore, offTargetMethod=offTargetMethod, minOffTargetScore=minOffTargetScore, maxOffTargetHitScore=maxOffTargetHitScore, enzyme=enzyme, PAM=PAM, gBlockDefault=gBlockDefault, plasmidType=plasmidType, haTag=haTag, sigPep=sigPep, setCoding=setCoding, bulkFile=bulkFile, prefix=prefix, basePlasmid=basePlasmidGB, basePlasmidName=basePlasmidName, locationType=locationType, filterCutSites=filterCutSites); # call result outMsg = outMsg + sep + output["geneName"] + sep + output["geneFileStr"] + sep + output["plasmidFileStr"] + sep + output["editedLocusFileStr"] + sep + output["oligoFileStr"] + sep + output["gBlockFileStr"] + sep + output["gRNATable"] + sep + output["logFileStr"]; - if haTag and plasmidType == "pSN150": # if using HA tags and pSN150, + if haTag and (plasmidType == "pSN150" or plasmidType == "pPC101"): # if using HA tags and pSN150, outputHA = output["outputHA"]; # save HA outputs outMsgHA = outMsgHA + sep + outputHA["geneName"] + sep + outputHA["geneFileStr"] + sep + outputHA["plasmidFileStr"] + sep + outputHA["editedLocusFileStr"] + sep + outputHA["oligoFileStr"] + sep + outputHA["gBlockFileStr"] + sep + outputHA["gRNATable"] + sep + outputHA["logFileStr"]; sendMsg(outMsgHA, "geneOutput", channel_id); diff --git a/py/genetargeter/GeneTargeterMethods.py b/py/genetargeter/GeneTargeterMethods.py index 09e846d0..cfe9524d 100755 --- a/py/genetargeter/GeneTargeterMethods.py +++ b/py/genetargeter/GeneTargeterMethods.py @@ -124,7 +124,7 @@ def targetGene(geneName, geneGB, codonOptimize="T. gondii", HRannotated=False, l - elif plasmidType == "pSN150" or plasmidType == "pSN150-KO" or plasmidType == "pSN150-Ter" or plasmidType == "pSN150-KO-Ter": # if using 5' plasmid + elif plasmidType == "pSN150" or plasmidType == "pSN150-KO" or plasmidType == "pSN150-Ter" or plasmidType == "pSN150-KO-Ter" or plasmidType == "pPC101": # if using 5' plasmid if plasmidType == "pSN150" or plasmidType == "pSN150-KO": # if using the normal ones, if enzyme == "Cas9": # if Cas9, plasmid = pSN150_Cas9; # set plasmid @@ -138,6 +138,9 @@ def targetGene(geneName, geneGB, codonOptimize="T. gondii", HRannotated=False, l elif enzyme == "Cas12": # if Cas12, plasmid = pSN150_Cas12_Ter; # set plasmid + elif plasmidType == "pPC101": # if using old version + plasmid = pPC101; # set plasmid + closestGene = 0; # by default, assume next gene downstream is before start of file target3Prime = False; # this plasmid targets 5' end @@ -207,6 +210,9 @@ def targetGene(geneName, geneGB, codonOptimize="T. gondii", HRannotated=False, l elif plasmidType=="pSN150-KO": flankingSeqsLHR = ['ggcc','ggcc'] flankingSeqsRHR = ['cgcc','cccg'] + elif plasmidType=="pPC101": + flankingSeqsLHR = ['ggcc','ggcc'] + flankingSeqsRHR = ['','cgta'] elif plasmidType=="custom": flankingSeqsLHR = ['',''] flankingSeqsRHR = ['',''] @@ -219,7 +225,7 @@ def targetGene(geneName, geneGB, codonOptimize="T. gondii", HRannotated=False, l LHR = chooseHR(geneGB, gene, doingHR='LHR', targetExtreme='start', lengthHR=lengthLHR, minTmEnds=endTempLHR, endsLength=endSizeLHR, targetRegionOverride=(plasmidType=="custom" or plasmidType=="pSN150-KO"), flankingSeqs=flankingSeqsLHR, filterCutSites=filterCutSites); # chooses LHR if plasmidType == "pSN150-KO" or (plasmidType=="custom" and locationType=="center"): # if knocking gene out, RHR = chooseHR(geneGB, gene, doingHR='RHR', targetExtreme='end', lengthHR=lengthRHR, minTmEnds=endTempRHR, endsLength=endSizeRHR, gBlockDefault=gBlockDefault, minGBlockSize=minGBlockSize, codingGene=codingGene, targetRegionOverride=(plasmidType=="custom" or plasmidType=="pSN150-KO"), flankingSeqs=flankingSeqsRHR, filterCutSites=filterCutSites); # chooses an RHR at end of gene! - elif plasmidType == "pSN150" or (plasmidType=="custom" and locationType=="5prime"): # otherwise if KD construct + elif plasmidType == "pSN150" or plasmidType == "pPC101" or (plasmidType=="custom" and locationType=="5prime"): # otherwise if KD construct RHR = chooseHR(geneGB, gene, doingHR='RHR', targetExtreme='start', lengthHR=lengthRHR, minTmEnds=endTempRHR, endsLength=endSizeRHR, gBlockDefault=gBlockDefault, minGBlockSize=minGBlockSize, codingGene=codingGene, targetRegionOverride=(plasmidType=="custom" or plasmidType=="pSN150-KO"), flankingSeqs=flankingSeqsRHR, filterCutSites=filterCutSites); # chooses an RHR at beginning if LHR["out"] is None or RHR["out"] is None and not HRannotated: # if searches fail and HR's not provided, @@ -271,6 +277,8 @@ def targetGene(geneName, geneGB, codonOptimize="T. gondii", HRannotated=False, l flankingSeqsRec = [LHR.seq[-4:],'gcga'] # 054 if plasmidType=="pSN150": flankingSeqsRec = ['tagc',RHR.seq[0:4]] + if plasmidType=="pPC101": + flankingSeqsRec = ['gATG',RHR.seq[0:4]] elif plasmidType=="custom": flankingSeqsRec = ['',''] @@ -356,7 +364,7 @@ def postProcessPlasmid(geneName, geneGB, gene, plasmidArmed, recoded, outputDic, extIndex = ( minGBlockSize - gibsonHomRange[1]*2 ) # extension length of gBlock such that it satisfies minimum gBlock length if plasmidType=="pSN054": # extend in different directions depending on plasmid recodedGBlock = GenBankAnn(gene.label + " extension", "misc_feature", plasmidArmed.origin[recodedOnPlasmid.index[0]:recodedOnPlasmid.index[0]+extIndex], False, [recodedOnPlasmid.index[0],recodedOnPlasmid.index[0]+extIndex]) # make extended recoded region gBlock annotation - elif plasmidType=="pSN150": + elif plasmidType=="pSN150" or plasmidType=="pPC101": recodedGBlock = GenBankAnn(gene.label + " extension", "misc_feature", plasmidArmed.origin[recodedOnPlasmid.index[1]-extIndex:recodedOnPlasmid.index[1]], False, [recodedOnPlasmid.index[1]-extIndex,recodedOnPlasmid.index[1]]) # make extended recoded region gBlock annotation elif plasmidType=="custom": recodedGBlock = GenBankAnn(gene.label + " extension", "misc_feature", plasmidArmed.origin[recodedOnPlasmid.index[0]:recodedOnPlasmid.index[0]+extIndex], False, [recodedOnPlasmid.index[0],recodedOnPlasmid.index[0]+extIndex]) # make extended recoded region gBlock annotation @@ -413,7 +421,7 @@ def postProcessPlasmid(geneName, geneGB, gene, plasmidArmed, recoded, outputDic, if plasmidType == "pSN054": # if using pSN150 instead of pSN054, gRNACassetteStart = plasmidArmed.findAnnsLabel("Lox")[0].index[0] + 4; # gBlock starts at first Lox +4 bp to avoid error due to repeated lox sequence gRNACassetteEnd = plasmidArmed.findAnnsLabel("RHR_vector overlap_left")[0].index[1]; # gBlock ends at RHR_vector overlap_left - if plasmidType == "pSN150": # if using pSN150 instead of pSN054, + if plasmidType == "pSN150" or plasmidType=="pPC101": # if using pSN150 instead of pSN054, gRNACassetteStart = plasmidArmed.findAnnsLabel(geneName + " RHR")[0].index[1]; # gBlock starts at end of RHR gRNACassetteEnd = max(gRNACassetteStart + minGBlockSize,findFirst(plasmidArmed.origin, cut_AsiSI)+len(cut_AsiSI)+gibsonHomRange[1]); # gBlock ends after AsiSI elif plasmidType == "pSN150-KO": # if using pSN150-KO instead of pSN054, diff --git a/py/genetargeter/constants.py b/py/genetargeter/constants.py index 3ea66eaf..c471a4c5 100644 --- a/py/genetargeter/constants.py +++ b/py/genetargeter/constants.py @@ -35,6 +35,7 @@ 'pSN054_V5' : [cut_FseI,cut_AsiSI,cut_IPpoI,cut_ISceI,cut_AflII,cut_AhdI], 'pSN150-Ter' : [cut_FseI,cut_AsiSI,cut_IPpoI,cut_AhdI,cut_XmaI,cut_NheI], 'pSN150-KO-Ter' : [cut_FseI,cut_AsiSI,cut_IPpoI,cut_AhdI,cut_AscI,cut_XmaI,cut_NheI], + 'pPC101' : [cut_FseI,cut_AsiSI,cut_BsiWI], 'custom' : [] } @@ -66,6 +67,9 @@ pSN150_Cas12 = GenBank(); pSN150_Cas12.load("input/plasmids/psn150_cas12.gb",loadFromFile=True); # load Cas9 plasmid sequence from GenBank format pSN150_Cas12.setAllColors(annColors['otherAnnColor']) +pPC101 = GenBank(); +pPC101.load("input/plasmids/ppc101-template.gb",loadFromFile=True); # load Cas12 plasmid sequence from GenBank format +pPC101.setAllColors(annColors['otherAnnColor']) # Codon usage tables codonUsageTables = { @@ -91,11 +95,14 @@ instructions_pSN150_KO = '\n*** Assembly instructions for pSN150-type constructs for knock-out: ***\n\n 1. Obtain primers in Oligo csv file and gene fragments in gBlock fasta file \n from DNA synthesis\n 2. PCR the RHR and LHR fragments from genomic DNA using the corresponding\n Gibson Assembly primers in Oligo csv file\n 3. Digest empty parent vector with restriction enzyme FseI\n 4. Gibson Assembly to insert LHR into digestion product\n 5. Digest resulting vector with restriction enzymes AhdI and AsiSI\n 6. Gibson Assembly to insert sgRNA cassette and RHR into digestion product; if design includes \n recoded region, include in assembly as well\n 7. Check all steps by sequencing\n 8. Transfect into Cas9 or Cas12-containing cell lines!' +instructions_pPC101 = '\n*** Assembly instructions for pPC101-type constructs for transcriptional conditional knock-down: ***\n\n 1. Obtain primers in Oligo csv file and gene fragments in gBlock fasta file \n from DNA synthesis\n 2. PCR the LHR and RHR* fragments from genomic DNA using the corresponding \n Gibson Assembly primers in Oligo csv file\n 3. Digest empty parent vector with restriction enzyme FseI\n 4. Gibson Assembly to insert LHR into digestion product\n 5. Digest resulting vector with restriction enzyme AsiSI\n 6. Gibson Assembly to insert RHR and sgRNA cassette into digestion product; if design includes \n recoded region, include in assembly as well\n 7. Check all steps by sequencing\n 8. Transfect into Cas9 or Cas12-containing cell lines!\n * Alternatively, the tags, recoded region, RHR, and sgRNA \ncassette can often be synthesized commercially as \na single gene fragment to be inserted in a simpler Gibson reaction.' + instructions_custom = '\n*** Assembly instructions for custom base plasmid constructs: ***\n\n 1. Obtain primers in Oligo csv file and gene fragments in gBlock fasta file \n from DNA synthesis\n 2. PCR the RHR and LHR fragments from genomic DNA using the corresponding\n Gibson Assembly primers in Oligo csv file\n 3. Digest empty parent vector with restriction enzymes as needed for the custom plasmid\n 4. Gibson Assembly fragments as required for custom plasmid\n 5. Check all steps by sequencing\n 6. Transfect into Cas9 or Cas12-containing cell lines!' instructions = { 'pSN054':instructions_pSN054, 'pSN150':instructions_pSN150, 'pSN150-KO':instructions_pSN150_KO, +'pPC101': instructions_pPC101, 'custom': instructions_custom } diff --git a/py/genetargeter/plasmidConstruction.py b/py/genetargeter/plasmidConstruction.py index b55720cc..75ea05b3 100644 --- a/py/genetargeter/plasmidConstruction.py +++ b/py/genetargeter/plasmidConstruction.py @@ -54,7 +54,6 @@ def insertTargetingElementsPSN054(plasmid, geneName, gRNA, LHR, recodedRegion, R return plas; # returns modified plasmid - """ Inserts targeting elements given as arguments into pSN150 at predetermined sites. Elements given as arguments must be strings, not GenBankAnn objects. @@ -118,6 +117,46 @@ def insertTargetingElementsPSN150(plasmid, geneName, gRNA, LHR, recodedRegion, R return plas; # returns modified plasmid +def insertTargetingElementsPPC101(plasmid, geneName, gRNA, LHR, recodedRegion, RHR, haTag=True): + plas = copy.deepcopy(plasmid); # makes a copy of the plasmid object to modify without altering the original + + inLHR = findFirst(plas.origin, cut_FseI) + len(cut_FseI); # index of LHR start site (at end of FseI cut sequence) + plas.insertSeq(LHR.upper() + cut_FseI, inLHR); # inserts LHR sequence + annLHR = GenBankAnn(geneName+" LHR", "misc_feature", LHR, False, [inLHR,inLHR+len(LHR)], annColors['LHRColor']); # annotation object + plas.features.append(annLHR); # adds annotation + + endRHR = findFirst(plas.origin, cut_BsiWI); # index of RHR end site is middle of AhdI cut sequence, conserves frame + startRHR = findFirst(plas.origin, cut_AsiSI) + 3; # assume keeping HA tag + plas.removeSeq([startRHR, startRHR+2]); # removes sequence that RHR will replace + + if len(recodedRegion) > 0: # if there is a recoded region, + inRecode = startRHR; # index of recoded region start site (middle of AhdI cut sequence) + plas.insertSeq(recodedRegion.upper(), inRecode); # inserts recoded region sequence + + annRecoded = GenBankAnn(geneName+" Recoded Region", "misc_feature", recodedRegion, False, [inRecode,inRecode+len(recodedRegion)], annColors['recodedRegionColor']); # annotation object + plas.features.append(annRecoded); # adds annotation + startRHR = inRecode + len(recodedRegion); # shift RHR start site downstream of recoded region + if haTag: # if recoded region contains HA tag, + annHATag1 = GenBankAnn("HA tag (recoded)", "misc_feature", recodedRegion[9:len(ha_tag)+9], False, [inRecode+9,inRecode+len(ha_tag)+9], annColors['otherAnnColor']); # annotation object for HA tag + annHATag2 = GenBankAnn("HA tag (recoded)", "misc_feature", recodedRegion[15+len(ha_tag):len(ha_tag)*2+15], False, [inRecode+15+len(ha_tag),inRecode+len(ha_tag)*2+15], annColors['otherAnnColor']); # annotation object for HA tag + plas.features.append(annHATag1); # adds annotation + plas.features.append(annHATag2); # adds annotation + # plas.insertSeq('ATG', inRecode); # inserts recoded region sequence + # startRHR = startRHR + 3; # shift RHR start site downstream of recoded region + + plas.insertSeq(RHR.upper(), startRHR); # inserts RHR sequence + annRHR = GenBankAnn(geneName+" RHR", "misc_feature", RHR, False, [startRHR,startRHR+len(RHR)], annColors['RHRColor']); # annotation object + plas.features.append(annRHR); # adds annotation + + startGRNA = findFirst(plas.origin, 'AGGGTATACAGGGATATCGA'); # index of gRNA start site (at start of I-PpoI cut sequence) + endGRNA = startGRNA + len('AGGGTATACAGGGATATCGA'); # index of gRNA end site (at end of I-PpoI cut sequence) + plas.removeSeq([startGRNA, endGRNA]); # removes sequence that gRNA will replace + plas.insertSeq(gRNA.upper(), startGRNA); # inserts gRNA sequence with gg sequence used by T7 polymerase + annGRNA = GenBankAnn(geneName+" gRNA", "misc_feature", gRNA, False, [startGRNA,startGRNA+len(gRNA)], annColors['gRNAColor']); # annotation object. Note that gRNA starts after "gg" added for T7 polymerase + plas.features.append(annGRNA); # adds annotation + + return plas; # returns modified plasmid + """ Inserts targeting elements given as arguments into a custom plasmid. @@ -223,6 +262,8 @@ def insertTargetingElements(plasmid, geneName, gRNA, LHR, recodedRegion, RHR, pl out = insertTargetingElementsPSN150(plasmid, geneName, gRNA, LHR, recodedRegion, RHR, haTag); # use other method elif plasmidType == 'pSN150-KO': # if using pSN150-KO, out = insertTargetingElementsPSN150(plasmid, geneName, gRNA, LHR, recodedRegion, RHR, haTag, KO=True); # use other method + elif plasmidType == 'pPC101': + out = insertTargetingElementsPPC101(plasmid, geneName, gRNA, LHR, recodedRegion, RHR, haTag); # use other method elif plasmidType == 'custom': out = insertTargetingElementsCustom(plasmid, geneName, gRNA, LHR, recodedRegion, RHR); # use other method diff --git a/static/js/main_v1.js b/static/js/main_v2.js similarity index 99% rename from static/js/main_v1.js rename to static/js/main_v2.js index 800b14a2..00c721e5 100755 --- a/static/js/main_v1.js +++ b/static/js/main_v2.js @@ -820,6 +820,9 @@ function changeUTRTarget() { else if (document.getElementById('plasmidType').value === 'pSN150') { document.getElementById('locationType').value = '5prime'; } + else if (document.getElementById('plasmidType').value === 'pPC101') { + document.getElementById('locationType').value = '5prime'; + } else if (document.getElementById('plasmidType').value === 'pSN150-KO') { document.getElementById('locationType').value = 'center'; } diff --git a/templates/index.html b/templates/index.html index 8ee97d35..3544fb7e 100755 --- a/templates/index.html +++ b/templates/index.html @@ -25,7 +25,7 @@ - + @@ -65,6 +65,7 @@ +