def designPrimers(seq_args, global_args=None, reset_args=True, misprime_lib=None, mishyb_lib=None, input_log=None, output_log=None, err_log=None): ''' Run the Primer3 design process, with the same interface as the bindings, using the wrapped subprocess of primer3_core to do the work. If the global args have been previously set (either by a pervious `designPrimers` call or by a `setGlobals` call), `designPrimers` may be called with seqArgs alone (as a means of optimization). Args: seq_args (dict) : Primer3 sequence/design args as per Primer3 docs Kwargs: global_args (dict) : Primer3 global args as per Primer3 docs misprime_lib (dict) : `Sequence name: sequence` dictionary for mispriming checks. mishyb_lib (dict) : `Sequence name: sequence` dictionary for mishybridization checks. Returns: A dictionary of Primer3 results (should be identical to the expected BoulderIO output from primer3_main) ''' if reset_args: p3_args.clear() setGlobals(global_args, misprime_lib, mishyb_lib) setSeqArgs(seq_args) result = wrappers.designPrimers(p3_args, input_log=input_log, output_log=output_log, err_log=err_log) return convertResult(result)
def testHuman(self): binding_res = bindings.designPrimers( { "SEQUENCE_ID": "MH1000", "SEQUENCE_TEMPLATE": "GCTTGCATGCCTGCAGGTCGACTCTAGAGGATCCCCCTACATTTTAGCATCAGTGAGTACAGCATGCTTACTGGAAGAGAGGGTCATGCAACAGATTAGGAGGTAAGTTTGCAAAGGCAGGCTAAGGAGGAGACGCACTGAATGCCATGGTAAGAACTCTGGACATAAAAATATTGGAAGTTGTTGAGCAAGTNAAAAAAATGTTTGGAAGTGTTACTTTAGCAATGGCAAGAATGATAGTATGGAATAGATTGGCAGAATGAAGGCAAAATGATTAGACATATTGCATTAAGGTAAAAAATGATAACTGAAGAATTATGTGCCACACTTATTAATAAGAAAGAATATGTGAACCTTGCAGATGTTTCCCTCTAGTAG", "SEQUENCE_INCLUDED_REGION": [36, 342], }, { "PRIMER_OPT_SIZE": 20, "PRIMER_PICK_INTERNAL_OLIGO": 1, "PRIMER_INTERNAL_MAX_SELF_END": 8, "PRIMER_MIN_SIZE": 18, "PRIMER_MAX_SIZE": 25, "PRIMER_OPT_TM": 60.0, "PRIMER_MIN_TM": 57.0, "PRIMER_MAX_TM": 63.0, "PRIMER_MIN_GC": 20.0, "PRIMER_MAX_GC": 80.0, "PRIMER_MAX_POLY_X": 100, "PRIMER_INTERNAL_MAX_POLY_X": 100, "PRIMER_SALT_MONOVALENT": 50.0, "PRIMER_DNA_CONC": 50.0, "PRIMER_MAX_NS_ACCEPTED": 0, "PRIMER_MAX_SELF_ANY": 12, "PRIMER_MAX_SELF_END": 8, "PRIMER_PAIR_MAX_COMPL_ANY": 12, "PRIMER_PAIR_MAX_COMPL_END": 8, "PRIMER_PRODUCT_SIZE_RANGE": [[75, 100], [100, 125], [125, 150], [150, 175], [175, 200], [200, 225]], }, ) wrapper_res = wrappers.designPrimers( { "PRIMER_OPT_SIZE": 20, "PRIMER_PICK_INTERNAL_OLIGO": 1, "PRIMER_INTERNAL_MAX_SELF_END": 8, "PRIMER_MIN_SIZE": 18, "PRIMER_MAX_SIZE": 25, "PRIMER_OPT_TM": 60.0, "PRIMER_MIN_TM": 57.0, "PRIMER_MAX_TM": 63.0, "PRIMER_MIN_GC": 20.0, "PRIMER_MAX_GC": 80.0, "PRIMER_MAX_POLY_X": 100, "PRIMER_INTERNAL_MAX_POLY_X": 100, "PRIMER_SALT_MONOVALENT": 50.0, "PRIMER_DNA_CONC": 50.0, "PRIMER_MAX_NS_ACCEPTED": 0, "PRIMER_MAX_SELF_ANY": 12, "PRIMER_MAX_SELF_END": 8, "PRIMER_PAIR_MAX_COMPL_ANY": 12, "PRIMER_PAIR_MAX_COMPL_END": 8, "PRIMER_PRODUCT_SIZE_RANGE": "75-100 100-125 125-150 150-175 175-200 200-225", "SEQUENCE_ID": "MH1000", "SEQUENCE_TEMPLATE": "GCTTGCATGCCTGCAGGTCGACTCTAGAGGATCCCCCTACATTTTAGCATCAGTGAGTACAGCATGCTTACTGGAAGAGAGGGTCATGCAACAGATTAGGAGGTAAGTTTGCAAAGGCAGGCTAAGGAGGAGACGCACTGAATGCCATGGTAAGAACTCTGGACATAAAAATATTGGAAGTTGTTGAGCAAGTNAAAAAAATGTTTGGAAGTGTTACTTTAGCAATGGCAAGAATGATAGTATGGAATAGATTGGCAGAATGAAGGCAAAATGATTAGACATATTGCATTAAGGTAAAAAATGATAACTGAAGAATTATGTGCCACACTTATTAATAAGAAAGAATATGTGAACCTTGCAGATGTTTCCCTCTAGTAG", "SEQUENCE_INCLUDED_REGION": "36,342", } ) print("\n\n\n{:<30} {:<25} {:<25}".format("Output Key", "Wrapper Result", "Binding Result")) print("-" * 80) for k, v in binding_res.items(): print("{:<30} {:<25} {:<25}".format(k, repr(wrapper_res.get(k)), repr(v)))
def testHuman(self): binding_res = bindings.designPrimers( { 'SEQUENCE_ID': 'MH1000', 'SEQUENCE_TEMPLATE': 'GCTTGCATGCCTGCAGGTCGACTCTAGAGGATCCCCCTACATTTTAGCATCAGTGAGTACAGCATGCTTACTGGAAGAGAGGGTCATGCAACAGATTAGGAGGTAAGTTTGCAAAGGCAGGCTAAGGAGGAGACGCACTGAATGCCATGGTAAGAACTCTGGACATAAAAATATTGGAAGTTGTTGAGCAAGTNAAAAAAATGTTTGGAAGTGTTACTTTAGCAATGGCAAGAATGATAGTATGGAATAGATTGGCAGAATGAAGGCAAAATGATTAGACATATTGCATTAAGGTAAAAAATGATAACTGAAGAATTATGTGCCACACTTATTAATAAGAAAGAATATGTGAACCTTGCAGATGTTTCCCTCTAGTAG', 'SEQUENCE_INCLUDED_REGION': [36,342] }, { 'PRIMER_OPT_SIZE': 20, 'PRIMER_PICK_INTERNAL_OLIGO': 1, 'PRIMER_INTERNAL_MAX_SELF_END': 8, 'PRIMER_MIN_SIZE': 18, 'PRIMER_MAX_SIZE': 25, 'PRIMER_OPT_TM': 60.0, 'PRIMER_MIN_TM': 57.0, 'PRIMER_MAX_TM': 63.0, 'PRIMER_MIN_GC': 20.0, 'PRIMER_MAX_GC': 80.0, 'PRIMER_MAX_POLY_X': 100, 'PRIMER_INTERNAL_MAX_POLY_X': 100, 'PRIMER_SALT_MONOVALENT': 50.0, 'PRIMER_DNA_CONC': 50.0, 'PRIMER_MAX_NS_ACCEPTED': 0, 'PRIMER_MAX_SELF_ANY': 12, 'PRIMER_MAX_SELF_END': 8, 'PRIMER_PAIR_MAX_COMPL_ANY': 12, 'PRIMER_PAIR_MAX_COMPL_END': 8, 'PRIMER_PRODUCT_SIZE_RANGE': [[75,100],[100,125],[125,150],[150,175],[175,200],[200,225]], } ) wrapper_res = wrappers.designPrimers( { 'PRIMER_OPT_SIZE': 20, 'PRIMER_PICK_INTERNAL_OLIGO': 1, 'PRIMER_INTERNAL_MAX_SELF_END': 8, 'PRIMER_MIN_SIZE': 18, 'PRIMER_MAX_SIZE': 25, 'PRIMER_OPT_TM': 60.0, 'PRIMER_MIN_TM': 57.0, 'PRIMER_MAX_TM': 63.0, 'PRIMER_MIN_GC': 20.0, 'PRIMER_MAX_GC': 80.0, 'PRIMER_MAX_POLY_X': 100, 'PRIMER_INTERNAL_MAX_POLY_X': 100, 'PRIMER_SALT_MONOVALENT': 50.0, 'PRIMER_DNA_CONC': 50.0, 'PRIMER_MAX_NS_ACCEPTED': 0, 'PRIMER_MAX_SELF_ANY': 12, 'PRIMER_MAX_SELF_END': 8, 'PRIMER_PAIR_MAX_COMPL_ANY': 12, 'PRIMER_PAIR_MAX_COMPL_END': 8, 'PRIMER_PRODUCT_SIZE_RANGE': '75-100 100-125 125-150 150-175 175-200 200-225', 'SEQUENCE_ID': 'MH1000', 'SEQUENCE_TEMPLATE': 'GCTTGCATGCCTGCAGGTCGACTCTAGAGGATCCCCCTACATTTTAGCATCAGTGAGTACAGCATGCTTACTGGAAGAGAGGGTCATGCAACAGATTAGGAGGTAAGTTTGCAAAGGCAGGCTAAGGAGGAGACGCACTGAATGCCATGGTAAGAACTCTGGACATAAAAATATTGGAAGTTGTTGAGCAAGTNAAAAAAATGTTTGGAAGTGTTACTTTAGCAATGGCAAGAATGATAGTATGGAATAGATTGGCAGAATGAAGGCAAAATGATTAGACATATTGCATTAAGGTAAAAAATGATAACTGAAGAATTATGTGCCACACTTATTAATAAGAAAGAATATGTGAACCTTGCAGATGTTTCCCTCTAGTAG', 'SEQUENCE_INCLUDED_REGION': '36,342' } ) print('\n\n\n{:<30} {:<25} {:<25}'.format('Output Key', 'Wrapper Result', 'Binding Result')) print('-'*80) for k, v in binding_res.items(): print('{:<30} {:<25} {:<25}'.format(k, repr(wrapper_res.get(k)), repr(v)))