Because of what is described in #161 , previously when fp.position is equal to rp.position, this used to return an empty string for all values except when equal to zero (see below former behaviour of Dseqrecord.getitem).
Now, in a circular sequence if both indexes are equal, the whole linearised sequence is returned, which is not what you want in this case. This what happens with the following anneal below because of this
cacatacgatttaggtgacactatagaac
CACATCCGAACATAAACAACCCACATACGATTTAGGTGACACTATAGAAC
ggttgtttatgttcggatgtg
> What you would want: cacatacgatttaggtgacactatagaaccacatccgaacataaacaacc
> What you get: cacatacgatttaggtgacactatagaacCACATCCGAACATAAACAACCCACATACGATTTAGGTGACACTATAGAACcacatccgaacataaacaacc
To fix this, I have added an extra if statement in this case:
if fp.position == rp.position:
prd = _Dseqrecord(fp) + _Dseqrecord(rp).reverse_complement()
else:
# as before
Hi @BjornFJohansson this is related to #191. Documenting it here just in case you can think of other places where similar things could happen.
In
Anneal.products
, this is the line that produces a new sequence based on where the primers annealBecause of what is described in #161 , previously when fp.position is equal to rp.position, this used to return an empty string for all values except when equal to zero (see below former behaviour of
Dseqrecord.getitem
).Now, in a circular sequence if both indexes are equal, the whole linearised sequence is returned, which is not what you want in this case. This what happens with the following anneal below because of this
To fix this, I have added an extra if statement in this case: