def test_primer_Design_with_linker(): ''' test_primer_design''' b = Dseqrecord( "agctactgactattaggggttattctgatcatctgatctactatctgactgtactgatcta") l = Dseqrecord("AAATTTCCCGGG") c = Dseqrecord( "tctgatctactatctgactgtactgatctattgacactgtgatcattctagtgtattactc") frags = assembly_fragments((primer_design(b), l, primer_design(c))) asm1 = Assembly(frags) assert asm1.assemble_linear()[0].seguid(), ( b + l + c).seguid() == 'l95igKB8iKAKrvvqE9CYksyNx40' frags = assembly_fragments( (primer_design(b), l, primer_design(c), primer_design(b))) b2 = pcr(frags[-1].forward_primer, frags[0].reverse_primer, b) asm2 = Assembly((b2, frags[1], frags[2])) assert (b + l + c).looped().cseguid() == asm2.assemble_circular()[0].cseguid() assert (b + l + c).looped().cseguid() == 'jdHXfQI5k4Sk2ESiZYfKv4oP2FI'
def test_cut_feat(): from pydna.readers import read from pydna.amplify import pcr from pydna.design import primer_design from pydna.dseqrecord import Dseqrecord from Bio.Restriction import EcoRI puc19 = read('pUC19_MarkBudde.gb') assert len(puc19.features) == 19 puc_lin = puc19[:] assert len(puc_lin.features) == 19 ampl = primer_design(puc_lin) pf, pr = ampl.forward_primer, ampl.reverse_primer pcrProd = pcr(pf, pr, puc19) assert len(pcrProd.features) == 21 assert len(pcrProd.cut(EcoRI)[1].features) == 16 def amplicon_to_dseqrecord(a): d = Dseqrecord(a.seq) d.features = a.features return d pcrProdDseqrecord = amplicon_to_dseqrecord(pcrProd) assert len(pcrProdDseqrecord.cut(EcoRI)[1].features) == 16
def test_no_fwdprimer_anneal(): f0, r0 = parse_primers('''>ForwardPrimer gctact >ReversePrimer tgtggttactgactctatcttg''') t0 = Dseqrecord("gctactacacacgtactgactgcctccaagatagagtcagtaaccaca") f = f0 r = r0 t = t0 with pytest.raises(ValueError): pcr(f, r, t)
def test_pcr_not_specific(): f0, r0 = parse_primers(""">ForwardPrimer gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg""") t0 = Dseqrecord( "gctactacacacgtactgactgtgctactacacacgtactgactgcctccaagatagagtcagtaaccaca" ) f = f0 r = r0 t = t0 with pytest.raises(ValueError): pcr(f, r, t)
def test_feature_note(): f0, r0 = parse_primers('''>ForwardPrimer gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg''') t0 = Dseqrecord("gctactacacacgtactgactgcctccaagatagagtcagtaaccaca") t0.add_feature() del t0.features[0].qualifiers["label"] t0.features[0].qualifiers["note"] = ["note"] f = f0 r = r0 t = t0 assert str(pcr( f, r, t).seq) == "gctactacacacgtactgactgcctccaagatagagtcagtaaccaca" assert pcr(f, r, t).name == "note"
def test_Amplicon_argument(): f0, r0 = parse_primers('''>ForwardPrimer gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg''') t0 = Dseqrecord("gctactacacacgtactgactgcctccaagatagagtcagtaaccaca") f = f0 r = r0 t = t0 ampl = pcr(f, r, t) assert str(ampl.seq) == "gctactacacacgtactgactgcctccaagatagagtcagtaaccaca" amplicon_from_amplicon = pcr(ampl) assert str(amplicon_from_amplicon.seq ) == "gctactacacacgtactgactgcctccaagatagagtcagtaaccaca"
def test_string_arguments(): f0, r0 = parse_primers('''>ForwardPrimer gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg''') t0 = Dseqrecord("gctactacacacgtactgactgcctccaagatagagtcagtaaccaca") f = str(f0.seq) r = str(r0.seq) t = str(t0.seq) assert str(pcr( (f, r), t).seq) == "gctactacacacgtactgactgcctccaagatagagtcagtaaccaca"
def test_Primer_arguments(): f0, r0 = parse_primers('''>ForwardPrimer gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg''') t0 = Dseqrecord("gctactacacacgtactgactgcctccaagatagagtcagtaaccaca") f = f0 r = r0 t = t0 assert str(pcr( f, r, t).seq) == "gctactacacacgtactgactgcctccaagatagagtcagtaaccaca"
def test_Dseq_arguments(): from pydna.dseq import Dseq f0, r0 = parse_primers('''>ForwardPrimer gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg''') t0 = Dseqrecord("gctactacacacgtactgactgcctccaagatagagtcagtaaccaca") f = Dseq(str(f0.seq)) r = Dseq(str(r0.seq)) t = Dseq(str(t0.seq)) assert str(pcr( f, r, t).seq) == "gctactacacacgtactgactgcctccaagatagagtcagtaaccaca"
def test_feature_label(): f0, r0 = parse_primers('''>ForwardPrimer gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg''') t0 = Dseqrecord("gctactacacacgtactgactgcctccaagatagagtcagtaaccaca") t0.add_feature() f = f0 r = r0 t = t0 assert str(pcr( f, r, t).seq) == "gctactacacacgtactgactgcctccaagatagagtcagtaaccaca"
def test_Seq_arguments(): from Bio.Seq import Seq f0, r0 = parse_primers(""">ForwardPrimer gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg""") t0 = Dseqrecord("gctactacacacgtactgactgcctccaagatagagtcagtaaccaca") f = Seq(str(f0.seq)) r = Seq(str(r0.seq)) t = Seq(str(t0.seq)) assert str(pcr( f, r, t).seq) == "gctactacacacgtactgactgcctccaagatagagtcagtaaccaca"
def test_circ_pcr(): """ <-----------------------------------------------------58-> <----------------------------33-> ccaccaccaccaccaccaccaccaccaccacggaggggccgtggtggacgagggcc ||||||||||||||||||||||||| TCAGGTGAGGCGGAACCAACCCTCCTGGCCATGggaggggccgtggtggacgagggccccacaggcg--> |||||||||||||||||||||||||| ggcggaaccaaccctcctggccATGgactacaaagacgatgacgacaagcttgcggc <----------------------------------------------------------------------42-> <-----------------------------------------------------25-><------------17-> ccaccaccaccaccaccaccaccaccaccacggaggggccgtggtggacgagggcc ||||||||||||||||||||||||| ggaggggccgtggtggacgagggccccacaggcgTCAGGTGAGGCGGAACCAACCCTCCTGGCCATG |||||||||||||||||||||||||| ggcggaaccaaccctcctggccATGgactacaaagacgatgacgacaagcttgcggc """ s = parse( """ >MCT4_flaghis_rv gccgcaagcttgtcgtcatcgtctttgtagtcCATggccaggagggttggttccgcc >MCT4_flaghis_fw ccaccaccaccaccaccaccaccaccaccacggaggggccgtggtggacgagggcc""", ds=False, ) t = parse(""" >hej circular TCAGGTGAGGCGGAACCAACCCTCCTGGCCATGggaggggccgtggtggacgagggccccacaggcg """) p = pcr(s, t) assert ( str(p.seq).lower() == "ccaccaccaccaccaccaccaccaccaccacggaggggccgtggtggacgagggccccacaggcgtcaggtgaggcggaaccaaccctcctggccatggactacaaagacgatgacgacaagcttgcggc" )
def test_set_primer_footprint(): f, r = parse_primers(""">ForwardPrimer gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg""") t = Dseqrecord("gctactacacacgtactgactgcctccaagatagagtcagtaaccaca") ampl = pcr((f, r), t) assert len(ampl.forward_primer.footprint) == 22 assert len(ampl.reverse_primer.footprint) == 22 ampl.set_forward_primer_footprint(15) ampl.set_reverse_primer_footprint(15) assert len(ampl.forward_primer.footprint) == 15 assert len(ampl.reverse_primer.footprint) == 15
def test_circ_pcr(): ''' <-----------------------------------------------------58-> <----------------------------33-> ccaccaccaccaccaccaccaccaccaccacggaggggccgtggtggacgagggcc ||||||||||||||||||||||||| TCAGGTGAGGCGGAACCAACCCTCCTGGCCATGggaggggccgtggtggacgagggccccacaggcg--> |||||||||||||||||||||||||| ggcggaaccaaccctcctggccATGgactacaaagacgatgacgacaagcttgcggc <----------------------------------------------------------------------42-> <-----------------------------------------------------25-><------------17-> ccaccaccaccaccaccaccaccaccaccacggaggggccgtggtggacgagggcc ||||||||||||||||||||||||| ggaggggccgtggtggacgagggccccacaggcgTCAGGTGAGGCGGAACCAACCCTCCTGGCCATG |||||||||||||||||||||||||| ggcggaaccaaccctcctggccATGgactacaaagacgatgacgacaagcttgcggc ''' s = parse(''' >MCT4_flaghis_rv gccgcaagcttgtcgtcatcgtctttgtagtcCATggccaggagggttggttccgcc >MCT4_flaghis_fw ccaccaccaccaccaccaccaccaccaccacggaggggccgtggtggacgagggcc''', ds=False) t = parse(''' >hej circular TCAGGTGAGGCGGAACCAACCCTCCTGGCCATGggaggggccgtggtggacgagggccccacaggcg ''') p = pcr(s, t) assert str(p.seq).lower( ) == 'ccaccaccaccaccaccaccaccaccaccacggaggggccgtggtggacgagggccccacaggcgtcaggtgaggcggaaccaaccctcctggccatggactacaaagacgatgacgacaagcttgcggc'
def test_primer_Design(): ''' test_primer_design''' a = Dseqrecord( "atgactgctaacccttccttggtgttgaacaagatcgacgacatttcgttcgaaacttacgatg") b = Dseqrecord( "ccaaacccaccaggtaccttatgtaagtacttcaagtcgccagaagacttcttggtcaagttgcc") c = Dseqrecord( "tgtactggtgctgaaccttgtatcaagttgggtgttgacgccattgccccaggtggtcgtttcgtt") frags = assembly_fragments([primer_design(r) for r in (a, b, c)]) asm = Assembly(frags) assert asm.assemble_linear()[0].seguid() == "1eNv3d_1PqDPP8qJZIVoA45Www8" frags = assembly_fragments([primer_design(r) for r in (a, b, c, a)]) a2 = pcr(frags[-1].forward_primer, frags[0].reverse_primer, a) asm = Assembly((a2, frags[1], frags[2])) assert asm.assemble_circular()[0].cseguid( ) == "V3Mi8zilejgyoH833UbjJOtDMbc"
def pcr(template,*primers): """ Forward PCR reaction w/ primers and template """ return amplify.pcr(primers,template)
pYPKa_Z = pYPKa.linearize(ZraI) pYPKa_A = pYPKa.linearize(AjiI) pYPKa_E = pYPKa.linearize(EcoRV) bbdict = {"Z": pYPKa_Z, "A": pYPKa_A, "E": pYPKa_E} fdict = {"Z": "promoter", "A": "gene", "E": "terminator"} csvfile = "promoter_list_003.csv" with open(csvfile) as csvfile: reader = csv.reader(csvfile) for row in reader: ins, letter, pf, pr, template, comment = row temp = genbank(template) insert = pcr(p[int(pf)], p[int(pr)], temp) label = f"{ins}_promoter" if letter == "Z": insert.add_feature(type="promoter", name=label, ApEinfo_label=label, ApEinfo_fwdcolor="#FC6600", ApEinfo_revcolor="#7C4700", fp=p[int(pf)].format("tab").strip(), rp=p[int(pr)].format("tab").strip(), reference=template) if letter == "E":
>567_pCAPsAjiIF (23-mer) GTcggctgcaggtcactagtgag >577_crp585-557 (29-mer) gttctgatcctcgagcatcttaagaattc >468_pCAPs_release_fw (25-mer) gtcgaggaacgccaggttgcccact >467_pCAPs_release_re (31-mer) ATTTAAatcctgatgcgtttgtctgcacaga >568_pCAPsAjiIR (22-mer) GTGCcatctgtgcagacaaacg >578_crp42-70 (29-mer) gttcttgtctcattgccacattcataagt''') p = pcr(p577, p567, pYPKa_Z_prom) g = pcr(p468, p467, pYPKa_A_saat) t = pcr(p568, p578, pYPKa_E_term) pYPKpw = read("pYPKpw.gb") from Bio.Restriction import ZraI pYPKpw_lin = pYPKpw.linearize(ZraI) asm = Assembly( (pYPKpw_lin, p, g, t) ) candidate = asm.circular_products[0]
def test_shifts(): from pydna.parsers import parse from pydna.parsers import parse_primers from pydna.amplify import pcr #from pydna.amplify import nopcr s = parse(''' >MCT4_flaghis_rv gccgcaagcttgtcgtcatcgtctttgtagtcCATggccaggagggttggttccgcc >MCT4_flaghis_fw ccaccaccaccaccaccaccaccaccaccacggaggggccgtggtggacgagggcc''', ds=False) t = parse(''' >hej circular TCAGGTGAGGCGGAACCAACCCTCCTGGCCATGggaggggccgtggtggacgagggccccacaggcg ''') p = pcr(s, t) assert str(p.seq).lower( ) == 'ccaccaccaccaccaccaccaccaccaccacggaggggccgtggtggacgagggccccacaggcgtcaggtgaggcggaaccaaccctcctggccatggactacaaagacgatgacgacaagcttgcggc' f, r, t = parse(''' #A >ForwardPrimer actacacacgtactgactg >ReversePrimer ggttactgactctatcttg >MyTemplate gctactacacacgtactgactGcctcCaagatAgagtcagtaaccaca''') a = pcr(f, r, t) assert str( a.seq).lower() == "actacacacgtactgactGcctcCaagatAgagtcagtaacc".lower() f, r, t = parse(''' #B >ForwardPrimer actacacacgtactgactg >ReversePrimer ggttactgactctatcttg >MyTemplate circular gctactacacacgtactgactgcctccaagatagagtcagtaaccaca''') # actacacacgtactgactg> # ||||||||||||||||||| # gctactacacacgtactgactgcctccaagatagagtcagtaaccaca # # cgatgatgtgtgcatgactgacggaggttctatctcagtcattggtgt # ||||||||||||||||||| # <gttctatctcagtcattgg b = pcr(f, r, t) assert a.seq == b.seq a.template = None b.template = None assert a == b f, r, t = parse(''' #C >ForwardPrimer actacacacgtactgactg >ReversePrimer ggttactgactctatcttg >MyTemplate circular cgtactgactgcctccaagatagagtcagtaaccacagctactacaca''') c = pcr(f, r, t) assert b.seq == c.seq f, r, t = parse(''' #D >ForwardPrimer actacacacgtactgactg >ReversePrimer ggttactgactctatcttg >MyTemplate48 circular tccaagatagagtcagtaaccacagctactacacacgtactgactgcc''') ''' 012345678901234567890123456789012345678901234567 ------------27-------------- actacacacgtactgactg tccaagatagagtcagtaaccacagctactacacacgtactgactgcc caagatagagtcagtaacc -- 012345678901234567890123456789012345678901234567 ------------23---------- actacacacgtactgactg actacacacgtactgactgcctccaagatagagtcagtaaccacagct caagatagagtcagtaacc ------------------------------------------ actacacacgtactgactgcctccaagatagagtcagtaacc ''' d = pcr(f, r, t) assert c.seq == d.seq f, r, t = parse(''' #E >ForwardPrimer actacacacgtactgactg >ReversePrimer ggttactgactctatcttg >MyTemplate circular gagtcagtaaccacagctactacacacgtactgactGcctccaagata''') e = pcr(f, r, t) assert d.seq == e.seq f, r, t = parse(''' #F >ForwardPrimer actacacacgtactgactg >ReversePrimer ggttactgactctatcttg >MyTemplate circular actacacacgtactgactGcctccaagatagagtcagtaaccacagct''') f = pcr(f, r, t)
def test_wrong_argument_type(): with pytest.raises(TypeError): pcr(1, 2, 3)
print(insertname, pf, pr, comment) fp = lp[int(pf)] rp = lp[int(pr)] gbref = p.promoter().description gblink = p.cds().id template = Dseqrecord(p.promoter()) templatesize = len(template) insertseguid = template.seguid() finalcseguidZ = (pYPKa.linearize(ZraI) + pcr(fp, rp, template)).looped().cseguid() finalcseguidE = (pYPKa.linearize(EcoRV) + pcr(fp, rp, template)).looped().cseguid() content = t.format(tp=insertname, gbref=gbref, gblink=gblink, templatesize=templatesize, insertseguid=insertseguid, finalcseguidZ=finalcseguidZ, finalcseguidE=finalcseguidE, fpn=fp.name, fps=fp.seq, rpn=rp.name, rps=rp.seq)
def test_pcr(): ''' test pcr''' raw = [] raw.append(( '7JOV1MJBZJp2Smja/7KFGhS2SWY', parse(''' >524_pFA6aF (29-mer) cacatacgatttaggtgacactatagaac >523_AgTEF1tpR (21-mer) ggttgtttatgttcggatgtg '''), parse("pAG25.gb"), )) raw.append(( '7pPxy/bQvs4+7CaOgiywQVzUFDc', parse(''' >lowgc_f TTTCACTAGTTACTTGTAGTCGacgtgccatctgtgcagacaaacgcatcaggatat >lowgc_r AAGTTGGAAATCTAGCTTTTCTTgacgtcagcggccgcattgcaca '''), parse("pCAPs.gb"), )) raw.append(( '7JOV1MJBZJp2Smja/7KFGhS2SWY', parse(''' >524_pFA6aF (29-mer) cacatacgatttaggtgacactatagaac >523_AgTEF1tpR (21-mer) ggttgtttatgttcggatgtg '''), parse("pAG25.gb"), )) raw.append(( 'yshvYTXr9iXCnh3YytWQRDBNQzI', parse(''' >ForwardPrimer1 gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg LOCUS sequence_50_bp 46 bp DNA circular UNK 08-FEB-2013 DEFINITION sequence_50_bp circular ACCESSION sequence_50_bp VERSION sequence_50_bp KEYWORDS . SOURCE . ORGANISM . . FEATURES Location/Qualifiers ORIGIN 1 ccaagataga gtcagtaacc acagctacta cacacgtact gactgt // '''), )) raw.append(( 'yshvYTXr9iXCnh3YytWQRDBNQzI', parse(''' >ForwardPrimer2 gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg LOCUS template 46 bp DNA circular UNK 15-OCT-2012 DEFINITION template circular ACCESSION template VERSION template KEYWORDS . SOURCE . ORGANISM . . FEATURES Location/Qualifiers ORIGIN 1 ccaagataga gtcagtaacc acagctacta cacacgtact gactgt // '''), )) raw.append(( 'yshvYTXr9iXCnh3YytWQRDBNQzI', parse(''' >ForwardPrimer3 gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg LOCUS template 46 bp DNA circular UNK 08-FEB-2013 DEFINITION template circular ACCESSION template VERSION template KEYWORDS . SOURCE . ORGANISM . . FEATURES Location/Qualifiers ORIGIN 1 tccaagatag agtcagtaac cacagctact acacacgtac tgactg // '''), )) raw.append(( 'yshvYTXr9iXCnh3YytWQRDBNQzI', parse(''' >ForwardPrimer4 gctactacacacgtactgactg >ReversePrimer tgtggttactgactctatcttg LOCUS template 46 bp DNA circular UNK 15-OCT-2012 DEFINITION template circular ACCESSION template VERSION template KEYWORDS . SOURCE . ORGANISM . . FEATURES Location/Qualifiers ORIGIN 1 gtccaagata gagtcagtaa ccacagctac tacacacgta ctgact // '''), )) raw.append(( '60meNXeGKO7ahZwcIl5yXHFC3Yg', parse(''' >fw1 cacatacgatttaggtgacactatagaac >rv ggttgtttatgttcggatgtg LOCUS tm 50 bp DNA circular UNK 15-OCT-2012 DEFINITION tm circular ACCESSION tm VERSION tm KEYWORDS . SOURCE . ORGANISM . . FEATURES Location/Qualifiers ORIGIN 1 cacatccgaa cataaacaac ccacatacga tttaggtgac actatagaac // '''), )) raw.append(( '60meNXeGKO7ahZwcIl5yXHFC3Yg', parse(''' >fw2 cacatacgatttaggtgacactatagaac >rv ggttgtttatgttcggatgtg LOCUS tm 50 bp DNA circular UNK 15-OCT-2012 DEFINITION tm circular ACCESSION tm VERSION tm KEYWORDS . SOURCE . ORGANISM . . FEATURES Location/Qualifiers ORIGIN 1 acatccgaac ataaacaacc cacatacgat ttaggtgaca ctatagaacc // '''), )) raw.append(( '60meNXeGKO7ahZwcIl5yXHFC3Yg', parse(''' >fw3 cacatacgatttaggtgacactatagaac >rv ggttgtttatgttcggatgtg LOCUS tm 50 bp DNA circular UNK 15-OCT-2012 DEFINITION tm circular ACCESSION tm VERSION tm KEYWORDS . SOURCE . ORGANISM . . FEATURES Location/Qualifiers ORIGIN 1 ccacatccga acataaacaa cccacatacg atttaggtga cactatagaa // '''), )) raw.append(( 'y6ohCJ4O+8Is012DItz4F4saxNo', parse(''' >f_Eric_Ma ARATGAGTCTTCTRACCGAGGTCG >r_Eric_Ma TGAAAAGACATCYTCAAGYYTCTG >templ AGCAAAAGCAGGTAGATATTGAAAAATGAGTCTTCTAACCGAGGTCGAAACGTACGTTCTCTCTATCGTCCCGTCAGGCCCCCTCAAAGCCGAGATCGCGCAGAGACTTGAAGATGTCTCTGCAGGGAAGAACACTGATCTCGAGGCTCTCATGGAATGGCTAAAGACAAGACCAATCCTGTCACCTCTGACTAAGGGGATTTTAGGGTTTGTGTTCACGCTCACCGTGCCCAGTGAGCGAGGACTGCAGCGTAGACGCTTTGTCCAGAATGCCTTAAATGGGAATGGAGACCCAAACAACATGGACAGGGCAGTCAAACTATACAGGAAGCTGAAAAGAGAGATAACATTCCATGGGGCTAAAGAGGTTGCACTCAGCTATTCAACCGGTGCACTTGCCAGTTGCATGGGTCTCATATACAACAGGATGGGAACGGTAACCACAGAAGTAGCTTTTGGCCTGGTGTGTGCCACTTGTGAGCAGATTGCTGACTCACAGCATCGATCTCACAGACAGATGGTGACTACCACCAACCCACTAATCAGGCATGAAAACAGAATGGTGCTGGCCAGCACTACAGCTAAGGCTATGGAGCAGATGGCTGGATCGAGTGAACAGGCAGCGGAAGCCATGGAGGTTGCTAGTCAGGCTAGGCAGATGGTGCAGGCAATGAGGACAATTGGGACTCACCCTAGCTCCAGTGCCGGTCTGAAAGATGATCTTCTTGAAAATTTGCAGGCCTACCAGAAGCGGATGGGAGTGCAAATGCAGCGATTCAAGTGATCCTCTCGTTATTGCCGCAAGTATCATTGGGATCTTGCACTTGATATTGTGGATTCTTGATCGTCCTTTCTTCAAATGTATTTATCGTCGCCTTAAATACGGTTTGAAAAGAGGGCCTTCTACGGAAGGAGTGCCTGAGTCTATGAGGGAAGAGTATCGGCAGGAACAGCAGAGTGCTGTGGATGTTGACGATGGTCATTTTGTCAACATAGAGCTGGAGTAAAAAACTACCTTGTTTCTACT '''), )) for key, tst in enumerate(raw): assert tst[0] == seguid(pcr(tst[1:]).seq)