Skip to content

Conversation

@grinner
Copy link
Contributor

@grinner grinner commented Feb 15, 2024

Fix _ThermoAnalysis._set_globals_and_seq_args for improper checks on misprime_lib and mishyb_lib leading to incorrect initialization of mp_lib and mh_lib and extensive run delays. See #133

Test code:

import time

from primer3 import __version__
from primer3.bindings import design_primers

# FASTA file from https://www.ncbi.nlm.nih.gov/nuccore/NC_004547.2
ref_fasta = 'NC_004547.2.fa'

seq = '''\
GATTGATTGAAGTCCAGGCACCGATTCTCAGCCGTATCGGCGATGGCACACAGGATAACTTGTCTGGTAC
AGAAAAAGCGGTGCAGGTTAAGGTAAAAGCCTTACCGGATGCCACATTTGAAGTGGTGCACTCACTGGCA
AAATGGAAACGCAAAACGCTGGGCGCGTATGATTTTAGCTTCGGTGAAGGCATTTATACTCACATGAAGG
CGCTGCGTCCGGACGAAGATCGCCTGAGCCCGATCCACTCGGTTTATGTCGATCAGTGGGATTGGGAGCG
CGTGATGGAGGATGGCGAGCGCAATGCTGAATATCTGAAATCGACGGTCACGCGTATTTATCAAGGCATT
AAAGCGACTGAGGCTGCGGTACATCAGGCGTTTGGCATTCAGCCTTTCCTGCCAGAGCAGATTCATTTTG
TGCATACCGAAACCTTGCTGAAGCGTTATCCCGATCTGGACGCCAAAGGGCGTGAGCGAGCTATAGCTAA
AGAGCTGGGTGCGGTCTTCCTGATTGGGATTGGCGGTAAGCTGTCCAGCGGACACTCTCACGATGTGCGT
GCACCGGATTATGATGACTGGACGACACCAGGCGAGCAGGAATTGGCGGGTTTGAACGGCGATATCGTCG
TCTGGAACCCAGTCCTGAACGATGCGTTTGAGATTTCATCCATGGGTATCCGCGTGGACGCAGAGGCGCT
AACACGCCAACTGGCACTGACGCAGGATGAGGAACGTCTGAAGCTTGAATGGCATCAGGCGCTGCTGCGC
'''.replace('\n', '')

GLOBALS = {
    'PRIMER_OPT_SIZE': 20,
    'PRIMER_MIN_SIZE': 18,
    'PRIMER_MAX_SIZE': 25,
    'PRIMER_PRODUCT_SIZE_RANGE': [
        [200, 250], [250, 300],
        [150, 200], [100, 150],
        [70, 100],
    ],
    'PRIMER_NUM_RETURN': 50,
    'PRIMER_MISPRIMING_LIBRARY': ref_fasta,
    'PRIMER_LIB_AMBIGUITY_CODES_CONSENSUS': 0,
}

seq_args = {
    'SEQUENCE_ID': 'XXX',
    'SEQUENCE_TEMPLATE': seq,
}

print('Using empty dicts for misprime_lib and mishyb_lib')
start = time.time()
candidates = design_primers(
    seq_args,
    GLOBALS,
    misprime_lib={},
    mishyb_lib={},
)
taken = time.time() - start
print(
    f'primer3 {__version__} with empty dicts gave {len(candidates)} in '
    f'{round(taken, 2)} seconds'
)

print("\nUsing None for misprime_lib and mishyb_lib")
start = time.time()
candidates = design_primers(
    seq_args,
    GLOBALS,
    misprime_lib=None,
    mishyb_lib=None,
)

taken = time.time() - start
print(
    f'primer3 {__version__} with None gave {len(candidates)} in '
    f'{round(taken, 2)} seconds\n',
)

Before:

Using empty dicts for misprime_lib and mishyb_lib
primer3 2.0.2 with empty dicts gave 1161 in 0.67 seconds

Using None for misprime_lib and mishyb_lib
primer3 2.0.2 with None gave 12 in 56.61 seconds

After

Using empty dicts for misprime_lib and mishyb_lib
primer3 2.0.3 with empty dicts gave 1161 in 0.66 seconds

Using None for misprime_lib and mishyb_lib
primer3 2.0.3 with None gave 1161 in 0.66 seconds

@grinner grinner requested a review from benpruitt February 15, 2024 16:32
@grinner grinner force-pushed the grinner_fix__set_globals_and_seq_args_misprime_lib_mishyb_lib branch from 7eb5e3d to b347027 Compare February 16, 2024 00:30
…n `misprime_lib` and

`mishyb_lib` leading to incorrect initialization of `mp_lib` and `mh_lib`

Test added in `test_primerdesign.py` to verify the timing of the fix.
@grinner grinner force-pushed the grinner_fix__set_globals_and_seq_args_misprime_lib_mishyb_lib branch from b347027 to 5795692 Compare February 16, 2024 01:31
Copy link
Contributor

@benpruitt benpruitt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@grinner grinner merged commit aba8960 into libnano:2.0.3-staging Feb 16, 2024
@benpruitt benpruitt mentioned this pull request Feb 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants