Skip to content

Commit

Permalink
feat: add PickHybProbeOnly logic to Primer3Task and Primer3Input
Browse files Browse the repository at this point in the history
  • Loading branch information
emmcauley committed Sep 25, 2024
1 parent 56b0b8b commit 15039d1
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 14 deletions.
2 changes: 1 addition & 1 deletion prymer/primer3/primer3_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ def _to_input_tags(cls, target: Span, design_region: Span) -> dict[Primer3InputT
Primer3InputTag.PRIMER_PICK_RIGHT_PRIMER: 1,
Primer3InputTag.PRIMER_PICK_INTERNAL_OLIGO: 0,
Primer3InputTag.SEQUENCE_TARGET: f"{target.start - design_region.start + 1},"
f"{target.length}",
f"{target.length}",
}

@property
Expand Down
17 changes: 13 additions & 4 deletions tests/primer3/test_primer3.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ def test_internal_probe_valid_designs(
genome_ref: Path,
valid_probe_params_no_exclude: ProbeParameters,
) -> None:
"""Test that left primer designs are within the specified design specifications."""
"""Test that internal probe designs are within the specified design specifications."""
target = Span(refname="chr1", start=201, end=250, strand=Strand.POSITIVE)
assert valid_probe_params_no_exclude is not None
design_input = Primer3Input(
Expand All @@ -177,9 +177,18 @@ def test_internal_probe_valid_designs(
task=PickHybProbeOnly(),
)
with Primer3(genome_fasta=genome_ref) as designer:
print(designer.get_design_sequences(target))
valid_probes = designer.design_oligos(design_input=design_input)
print(valid_probes)
primer3_result = designer.design_oligos(design_input=design_input)
assert len(primer3_result.filtered_designs) == 5
for probe_design in primer3_result.filtered_designs:
assert probe_design.self_any_th < valid_probe_params_no_exclude.probe_max_self_any_thermo
assert probe_design.self_end_th < valid_probe_params_no_exclude.probe_max_self_end_thermo
assert probe_design.hairpin_th < valid_probe_params_no_exclude.probe_max_hairpin_thermo
assert (
probe_design.longest_dinucleotide_run_length()
<= valid_probe_params_no_exclude.probe_max_dinuc_bases
)
assert probe_design.span.start >= target.start
assert probe_design.span.end <= target.end


def test_left_primer_valid_designs(
Expand Down
10 changes: 1 addition & 9 deletions tests/primer3/test_primer3_weights.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,7 @@ def test_primer_weights_valid() -> None:
assert test_dict[Primer3InputTag.PRIMER_WT_SIZE_GT] == 0.1
assert test_dict[Primer3InputTag.PRIMER_WT_TM_LT] == 1.0
assert test_dict[Primer3InputTag.PRIMER_WT_TM_GT] == 1.0
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_SIZE_LT] == 0.25
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_SIZE_GT] == 0.25
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_TM_LT] == 1.0
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_TM_GT] == 1.0
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_GC_PERCENT_LT] == 0.5
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_GC_PERCENT_GT] == 0.5
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_SELF_ANY] == 1.0
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_SELF_END] == 1.0
assert len((test_dict.values())) == 21
assert len((test_dict.values())) == 13


def test_probe_weights_valid() -> None:
Expand Down

0 comments on commit 15039d1

Please sign in to comment.