Re: [Biopython] Updating feature Location in Seqfiles

Peter Cock <[email protected]> Wed, 11 Nov 2020 22:41:50 +0000
Newsgroups gmane.comp.python.bio.general
Message-ID <CAKVJ-_4JYCYD1P66LD4BSH=8CK=zMNtNBjVjhWVfkz5shLjyhQ@mail.gmail.com>
Hi Franz,

Perhaps this example will help explain what I meant?

>>> old_list = ["A", "B", "C", "D"]
>>> new_list = old_list
>>> new_list[3] = "Z"
>>> new_list == old_list
True
>>> old_list
['A', 'B', 'C', 'Z']

In your example, CompareBefore, CompareAfter, and Seqfile.features are all
the same list.

Peter


On Wed, Nov 11, 2020 at 8:26 PM F.L. Ratzkowski <[email protected]> wrote:

> Hi,
> first of all thank you for your quick responds. I indeed mean Seqrecord
> sorry for being not fully accurate. The SeqRecord is a whole E.coli genome
> with lots of features. and the changes to the sequence I am making are due
> to random mutation means that they also occur in features and thereby
> affect the start and end position differently as well as features
> overlapping, thus i feel like the shifting or chunking method might not
> work. Or if so could u please provide more detail
>
> You stating 'both lists CompareBefore
> and CompareAfter will be the same list. Thus you'd find no differences. '
> could u elaborate, my understanding of the featurelocation command was that
> it would overwrite the previous feature.location.
>
> Thanks again for taking the time.
> Best wishes,
> Franz
>
> Franz L. Böge
> PhD Student, University of Cambridge
> Chin Group, MRC Laboratory of Molecular Biology
> Phone: +44 (0)1223 267604
>
>
>
>
> ------------------------------
> *From:* Peter Cock <[email protected]>
> *Sent:* 11 November 2020 19:40
> *To:* F.L. Ratzkowski <[email protected]>
> *Cc:* [email protected] <[email protected]>
> *Subject:* Re: [Biopython] Updating feature Location in Seqfiles
>
> Hello,
>
> First what may be the simple answer: Looking at that code snippet, and
> guessing that Seqfile is a SeqRecord object, both lists CompareBefore
> and CompareAfter will be the same list. Thus you'd find no differences.
>
> More generally, I would have recommend using slicing and addition of
> SeqRecord chunks, which will reserve your features and shift their
> coordinates accordingly - as long as each feature is fully within a chunk.
> The tutorial covers this.
>
> If you want to work more directly, you could try shifting a
> feature location
> with an offset by adding (or subtracting an integer). (You could do
> something
> similar with the (private) _shift methods, but that is not intended for
> direct use.)
>
> However, it looks like you're taking what I would consider to be the
> hardest
> option of rebuilding new location objects after all your sequence editing.
> This is only reasonably straightforward if you have just simple locations
> (like most bacterial features). Joins, origin wrapping, fuzzy locations etc
> would need additional work.
>
> Peter
>
> On Wed, Nov 11, 2020 at 5:26 PM F.L. Ratzkowski <[email protected]> wrote:
>
> Hi,
> i am new here so I am sorry if I am doing anything wrong, feel free to
> tell me.
> I am farely new to biopython as well, currently i have written a script
> that reads in a .gbk file and then deletes and inserts different parts of
> the sequence. this would alter the absolute position of features. I have
> ultimately run a script that safes the new positions in 2 dataframes. When
> i now want to update all features with the Featurelocation command it seems
> to not work. I saved the features in a variable before and after me
> updating the features and was hoping to then detect a difference but it
> fails. here the basic part of the script i am struggling with
>
> CompareBefore = Seqfile.features
>
> for z in range(0, len(featureEndList)):
>     feature_end = int(ELdf.iloc[z][1])
>     feature_start = int(SLdf.iloc[z][1])
>     feature_strand = Seqfile.features[z].location.strand
>     Seqfile.features[z].location = FeatureLocation(feature_start,
> feature_end,strand=feature_strand)
>
> CompareAfter = Seqfile.features
>
> list = []
> for x in range(0,len(CompareAfter)):
>     if CompareBefore[x] != CompareAfter[x]:
>         list.append(x)
>
> I get 0 hits in this list.
> Please help 🙂 thank you
>
> _______________________________________________
> Biopython mailing list  -  [email protected]
> https://mailman.open-bio.org/mailman/listinfo/biopython
>
>

_______________________________________________
Biopython mailing list  -  [email protected]
https://mailman.open-bio.org/mailman/listinfo/biopython