Skip to content

Commit 3f64ade

Browse files
committed
feat: add penalty weights for pick_hyb_probe task
1 parent 8d332df commit 3f64ade

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

prymer/primer3/primer3_weights.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
@dataclass(frozen=True, init=True, slots=True)
3333
class Primer3Weights:
3434
"""Holds the weights that Primer3 uses to adjust penalties
35-
that originate from the designed primer(s).
35+
that originate from the designed oligo(s).
3636
3737
The weights that Primer3 uses when a parameter is less than optimal are labeled with "_lt".
3838
"_gt" weights are penalties applied when a parameter is greater than optimal.
@@ -42,10 +42,10 @@ class Primer3Weights:
4242
4343
Example:
4444
>>> Primer3Weights() #default implementation
45-
Primer3Weights(product_size_lt=1, product_size_gt=1, product_tm_lt=0.0, product_tm_gt=0.0, primer_end_stability=0.25, primer_gc_lt=0.25, primer_gc_gt=0.25, primer_self_any=0.1, primer_self_end=0.1, primer_size_lt=0.5, primer_size_gt=0.1, primer_tm_lt=1.0, primer_tm_gt=1.0)
45+
Primer3Weights(product_size_lt=1, product_size_gt=1, product_tm_lt=0.0, product_tm_gt=0.0, primer_end_stability=0.25, primer_gc_lt=0.25, primer_gc_gt=0.25, primer_self_any=0.1, primer_self_end=0.1, primer_size_lt=0.5, primer_size_gt=0.1, primer_tm_lt=1.0, primer_tm_gt=1.0, probe_size_lt=0.25, probe_size_gt=0.25, probe_tm_lt=1.0, probe_tm_gt=1.0, probe_gc_lt=0.5, probe_gc_gt=0.5, probe_self_any=1.0, probe_self_end=1.0)
4646
4747
>>> Primer3Weights(product_size_lt=5)
48-
Primer3Weights(product_size_lt=5, product_size_gt=1, product_tm_lt=0.0, product_tm_gt=0.0, primer_end_stability=0.25, primer_gc_lt=0.25, primer_gc_gt=0.25, primer_self_any=0.1, primer_self_end=0.1, primer_size_lt=0.5, primer_size_gt=0.1, primer_tm_lt=1.0, primer_tm_gt=1.0)
48+
Primer3Weights(product_size_lt=5, product_size_gt=1, product_tm_lt=0.0, product_tm_gt=0.0, primer_end_stability=0.25, primer_gc_lt=0.25, primer_gc_gt=0.25, primer_self_any=0.1, primer_self_end=0.1, primer_size_lt=0.5, primer_size_gt=0.1, primer_tm_lt=1.0, primer_tm_gt=1.0, probe_size_lt=0.25, probe_size_gt=0.25, probe_tm_lt=1.0, probe_tm_gt=1.0, probe_gc_lt=0.5, probe_gc_gt=0.5, probe_self_any=1.0, probe_self_end=1.0)
4949
""" # noqa: E501
5050

5151
product_size_lt: int = 1
@@ -61,6 +61,14 @@ class Primer3Weights:
6161
primer_size_gt: float = 0.1
6262
primer_tm_lt: float = 1.0
6363
primer_tm_gt: float = 1.0
64+
probe_size_lt: float = 0.25
65+
probe_size_gt: float = 0.25
66+
probe_tm_lt: float = 1.0
67+
probe_tm_gt: float = 1.0
68+
probe_gc_lt: float = 0.5
69+
probe_gc_gt: float = 0.5
70+
probe_self_any: float = 1.0
71+
probe_self_end: float = 1.0
6472

6573
def to_input_tags(self) -> dict[Primer3InputTag, Any]:
6674
"""Maps weights to Primer3InputTag to feed directly into Primer3."""
@@ -78,5 +86,13 @@ def to_input_tags(self) -> dict[Primer3InputTag, Any]:
7886
Primer3InputTag.PRIMER_WT_SIZE_GT: self.primer_size_gt,
7987
Primer3InputTag.PRIMER_WT_TM_LT: self.primer_tm_lt,
8088
Primer3InputTag.PRIMER_WT_TM_GT: self.primer_tm_gt,
89+
Primer3InputTag.PRIMER_INTERNAL_WT_SIZE_LT: self.probe_size_lt,
90+
Primer3InputTag.PRIMER_INTERNAL_WT_SIZE_GT: self.probe_size_gt,
91+
Primer3InputTag.PRIMER_INTERNAL_WT_TM_LT: self.probe_tm_lt,
92+
Primer3InputTag.PRIMER_INTERNAL_WT_TM_GT: self.probe_tm_gt,
93+
Primer3InputTag.PRIMER_INTERNAL_WT_GC_PERCENT_LT: self.probe_gc_lt,
94+
Primer3InputTag.PRIMER_INTERNAL_WT_GC_PERCENT_GT: self.probe_gc_gt,
95+
Primer3InputTag.PRIMER_INTERNAL_WT_SELF_ANY: self.probe_self_any,
96+
Primer3InputTag.PRIMER_INTERNAL_WT_SELF_END: self.probe_self_end,
8197
}
8298
return mapped_dict

tests/primer3/test_primer3_weights.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,15 @@ def test_primer_weights_valid() -> None:
1919
assert test_dict[Primer3InputTag.PRIMER_WT_SIZE_GT] == 0.1
2020
assert test_dict[Primer3InputTag.PRIMER_WT_TM_LT] == 1.0
2121
assert test_dict[Primer3InputTag.PRIMER_WT_TM_GT] == 1.0
22-
assert len((test_dict.values())) == 13
22+
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_SIZE_LT] == 0.25
23+
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_SIZE_GT] == 0.25
24+
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_TM_LT] == 1.0
25+
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_TM_GT] == 1.0
26+
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_GC_PERCENT_LT] == 0.5
27+
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_GC_PERCENT_GT] == 0.5
28+
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_SELF_ANY] == 1.0
29+
assert test_dict[Primer3InputTag.PRIMER_INTERNAL_WT_SELF_END] == 1.0
30+
assert len((test_dict.values())) == 21
2331

2432

2533
def test_primer_weights_to_input_tags() -> None:

0 commit comments

Comments
 (0)