bioperl/bioperl-live — pull request #31 by fschwach (2012-01-10 13:07:10+00:00)
Title: Adding molecular cloning methods to Bio::SeqUtils

As discussed on the mailing ist:

I needed to manipulate Bio::Seq objects with annotations and sequence
features to simulate molecular cloning techniques, e.g. to cut a vector
and insert a fragment into it while preserving all the annotations and
moving the features accordingly.
My main aim was to split features that span deletion/insertion sites in
a meaningful way, which can not be done with the currently availble
methods.
I have modified Bio::SeqUtils so that I have the following new methods:

delete
======
removes a segment from a sequence object and adjusts positions and types
of locations of sequence features:
- locations of features that span the deletion sites are turned into
Splits.
- locations that extend into the deleted region are turned to Fuzzy to
indicate that their true start/end was lost.
- locations contained inside the deleted regions are lost.
- other features are shifted according to the length of the deletion.

insert
======
adds a Bio::Seq object into another one between specified insertion
sites. This also affects the features on the recipient sequence:
- locations of features that span the insertion site are split but
position types are not turned to Fuzzy because no part of the original
feature is lost.
- other features are shifted according to the length of the insertion.

ligate
======
just for convenience. Supply a recipient, a fragment and one or two
sites to cut the recipient. Can also flip the fragment if required.
Simply calls delete [, reverse_complement_with_features] and insert in
turn.

One situation I haven't handled yet is a deletion that spans the origin
of a circular molecule but that should be a rare thing to do anyway. The
code currently throws an error if this is attempted.