[Bioperl-l] sequence upgrading

Marc Logghe Marc.Logghe at devgen.com
Thu Jun 26 15:11:10 EDT 2003


Thanks,
and yes I was thinking of a module for deep copying of objects. Currently I
was trying with Data::Dumper cos this comes standard with Perl.
Regards,
ML

> -----Original Message-----
> From: Heikki Lehvaslaiho [mailto:heikki at ebi.ac.uk]
> Sent: Thursday, June 26, 2003 12:51 PM
> To: Marc Logghe
> Cc: 'Hilmar Lapp'; Bioperl-L (E-mail)
> Subject: RE: [Bioperl-l] sequence upgrading
> 
> 
> Marc,
> 
> I think Hilmar suggests adding something like this into 
> Bio::Seq::RichSeq:
> 
> 
> sub copy {
>     my ($self, $seq) = @_;
>     unless (defined $seq) {
>         # return a deep copy of $self
>         my $newseq = new $self;
>         # ... copy attributes
> 
>         return $newseq;
>     }
>     if ($seq->isa('Bio::PrimarySeqI') ) {
>         my $newseq = new $self;
>         @primaryseqmethods = qw( seq display_id ...);
>         map {$newseq->$_($seq->$_) } @primaryseqmethods;
>         return $newseq if $seq->isa('Bio::PrimarySeq');
> 
>         # either deal with all other methods by class
>         @seqmethods = qw( species ...);
> 
>         # or test them all one by one
>         $newseq->species($seq->species) if $seq->can('spacies');
>         # ...
>         returnt $newseq;
>     } else {
>      $self->throw("Can copy only sequence objects, not ". ref $seq.
> "\n");
>     }
> 
> }
> 
> Actually, the whole problem of dealing with attributes is solved in a
> CPAN module Clone which does deep copying of structures.
> 
> With it you can simply say:
> 
> use Clone qw(clone);
> # $seq can be e.g. Bio::Seq with features
> my $seq2 = clone $seq;
> 
> However, simply 'use'ing Clone in sequence classes would add 
> an external
> dependency into bioperl core classes, which is not acceptable.  I am
> sure there are many clever solutions to this problem, though.
> 
> 	-Heikki
> 
> On Thu, 2003-06-26 at 10:43, Marc Logghe wrote:
> > > 
> > > This depends entirely on your implementation. E.g., if 
> you put a copy 
> > > constructor on Bio::Seq::RichSeq that accepts 
> Bio::PrimarySeqs (or 
> > > whatever) then you would 'upgrade'.
> > > 
> > > 	-hilmar
> > OK, I see.
> > Something like:
> > 1) deep copying 
> > use Bio::SeqIO;
> > my $gbio = Bio::SeqIO->new(-format => 'genbank');
> > 
> > while (my $seq1 = $gbio->next_seq)
> > {
> >   my $seq2 = $seq1->copy # $seq2 is deep copy of 
> Bio::Seq::RichSeq object
> > $seq1
> > 
> >   # do some stuff with $seq2
> > }
> > 
> > or:
> > 2) 'upgrading'
> > use Bio::SeqIO;
> > use Bio::Seq::RichSeq;
> > my $fasta_io = Bio::SeqIO->new;
> > 
> > while (my $seq1 = $fasta_io->next_seq)
> > {
> >    my $seq2 = Bio::Seq::RichSeq->copy($seq1) # $seq2 is 
> enriched fasta seq
> > object
> > 
> >    # do some stuff with $seq2
> > }
> > 
> > Correct ?
> > Marc
> > _______________________________________________
> > Bioperl-l mailing list
> > Bioperl-l at portal.open-bio.org
> > http://portal.open-bio.org/mailman/listinfo/bioperl-l
> -- 
> ______ _/      _/_____________________________________________________
>       _/      _/                      http://www.ebi.ac.uk/mutations/
>      _/  _/  _/  Heikki Lehvaslaiho    heikki_at_ebi ac uk
>     _/_/_/_/_/  EMBL Outstation, European Bioinformatics Institute
>    _/  _/  _/  Wellcome Trust Genome Campus, Hinxton
>   _/  _/  _/  Cambs. CB10 1SD, United Kingdom
>      _/      Phone: +44 (0)1223 494 644   FAX: +44 (0)1223 494 468
> ___ _/_/_/_/_/________________________________________________________
> 


More information about the Bioperl-l mailing list