From amackey at pub.open-bio.org Tue Mar 1 11:56:04 2005 From: amackey at pub.open-bio.org (Aaron J Mackey) Date: Tue Mar 1 11:42:33 2005 Subject: [Bioperl-guts-l] bioperl-live README,1.36,1.37 Message-ID: <200503011656.j21Gu4DT028514@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live In directory pub.open-bio.org:/tmp/cvs-serv28505 Modified Files: README Log Message: another version fix Index: README =================================================================== RCS file: /home/repository/bioperl/bioperl-live/README,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** README 29 Sep 2004 00:04:13 -0000 1.36 --- README 1 Mar 2005 16:56:02 -0000 1.37 *************** *** 5,9 **** o Version ! This is Bioperl version 1.4 from CVS HEAD o Getting Started --- 5,9 ---- o Version ! This is Bioperl version 1.5 from CVS HEAD o Getting Started From faga at pub.open-bio.org Tue Mar 1 17:22:35 2005 From: faga at pub.open-bio.org (Ben faga) Date: Tue Mar 1 17:10:46 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/DB/GFF/Adaptor/dbi mysqlcmap.pm, 1.1, 1.2 Message-ID: <200503012222.j21MMZDT029559@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/DB/GFF/Adaptor/dbi In directory pub.open-bio.org:/tmp/cvs-serv29543/Bio/DB/GFF/Adaptor/dbi Modified Files: mysqlcmap.pm Log Message: Added a link creation method for CMap. Index: mysqlcmap.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/DB/GFF/Adaptor/dbi/mysqlcmap.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** mysqlcmap.pm 16 Feb 2005 04:19:51 -0000 1.1 --- mysqlcmap.pm 1 Mar 2005 22:22:33 -0000 1.2 *************** *** 480,483 **** --- 480,707 ---- } # fattribute_to_feature table }, # fattribute_to_feature + + + cmap_attribute => { + table=>q{ + create table cmap_attribute ( + attribute_id int(11) NOT NULL default '0', + table_name varchar(30) NOT NULL default '', + object_id int(11) NOT NULL default '0', + display_order int(11) NOT NULL default '1', + is_public tinyint(4) NOT NULL default '1', + attribute_name varchar(200) NOT NULL default '', + attribute_value text NOT NULL, + PRIMARY KEY (attribute_id), + KEY table_name (table_name,object_id,display_order,attribute_name) + ) TYPE=MyISAM; + } # table + }, + + cmap_correspondence_evidence => { + table=>q{ + create table cmap_correspondence_evidence ( + correspondence_evidence_id int(11) NOT NULL default '0', + accession_id varchar(20) NOT NULL default '', + feature_correspondence_id int(11) NOT NULL default '0', + evidence_type_accession varchar(20) NOT NULL default '0', + score double(8,2) default NULL, + rank int(11) NOT NULL default '0', + PRIMARY KEY (correspondence_evidence_id), + UNIQUE KEY accession_id (accession_id), + KEY feature_correspondence_id (feature_correspondence_id) + ) TYPE=MyISAM; + } # table + }, + + + cmap_correspondence_lookup => { + table=>q{ + create table cmap_correspondence_lookup ( + feature_id1 int(11) default NULL, + feature_id2 int(11) default NULL, + feature_correspondence_id int(11) default NULL, + start_position1 double(11,2) default NULL, + start_position2 double(11,2) default NULL, + stop_position1 double(11,2) default NULL, + stop_position2 double(11,2) default NULL, + map_id1 int(11) default NULL, + map_id2 int(11) default NULL, + feature_type_accession1 varchar(20) default NULL, + feature_type_accession2 varchar(20) default NULL, + KEY feature_id1 (feature_id1), + KEY corr_id (feature_correspondence_id), + KEY cl_map_id1 (map_id1), + KEY cl_map_id2 (map_id2), + KEY cl_map_id1_map_id2 (map_id1,map_id2), + KEY cl_map_id2_map_id1 (map_id2,map_id1) + ) TYPE=MyISAM; + } # table + }, + + + cmap_correspondence_matrix => { + table=>q{ + create table cmap_correspondence_matrix ( + reference_map_aid varchar(20) NOT NULL default '0', + reference_map_name varchar(32) NOT NULL default '', + reference_map_set_aid varchar(20) NOT NULL default '0', + reference_species_aid varchar(20) NOT NULL default '0', + link_map_aid varchar(20) default NULL, + link_map_name varchar(32) default NULL, + link_map_set_aid varchar(20) NOT NULL default '0', + link_species_aid varchar(20) NOT NULL default '0', + no_correspondences int(11) NOT NULL default '0' + ) TYPE=MyISAM; + } # table + }, + + + cmap_feature => { + table=>q{ + create table cmap_feature ( + feature_id int(11) NOT NULL default '0', + accession_id varchar(20) NOT NULL default '', + map_id int(11) default NULL, + feature_type_accession varchar(20) NOT NULL default '0', + feature_name varchar(32) NOT NULL default '', + is_landmark tinyint(4) NOT NULL default '0', + start_position double(11,2) NOT NULL default '0.00', + stop_position double(11,2) default NULL, + default_rank int(11) NOT NULL default '1', + direction tinyint(4) NOT NULL default '1', + gclass varchar(100) default NULL, + PRIMARY KEY (feature_id), + UNIQUE KEY gclass (gclass,feature_name), + UNIQUE KEY accession_id (accession_id), + KEY feature_name (feature_name), + KEY feature_id_map_id (feature_id,map_id), + KEY feature_id_map_id_start (feature_id,map_id,start_position), + KEY map_id (map_id), + KEY map_id_feature_id (map_id,feature_id) + ) TYPE=MyISAM; + } # table + }, + + + cmap_feature_alias => { + table=>q{ + create table cmap_feature_alias ( + feature_alias_id int(11) NOT NULL default '0', + feature_id int(11) NOT NULL default '0', + alias varchar(255) default NULL, + PRIMARY KEY (feature_alias_id), + UNIQUE KEY feature_id_2 (feature_id,alias), + KEY feature_id (feature_id), + KEY alias (alias) + ) TYPE=MyISAM; + } # table + }, + + + cmap_feature_correspondence => { + table=>q{ + create table cmap_feature_correspondence ( + feature_correspondence_id int(11) NOT NULL default '0', + accession_id varchar(20) NOT NULL default '', + feature_id1 int(11) NOT NULL default '0', + feature_id2 int(11) NOT NULL default '0', + is_enabled tinyint(4) NOT NULL default '1', + PRIMARY KEY (feature_correspondence_id), + UNIQUE KEY accession_id (accession_id), + KEY feature_id1 (feature_id1), + KEY cmap_feature_corresp_idx (is_enabled,feature_correspondence_id) + ) TYPE=MyISAM; + } # table + }, + + + cmap_map => { + table=>q{ + create table cmap_map ( + map_id int(11) NOT NULL default '0', + accession_id varchar(20) NOT NULL default '', + map_set_id int(11) NOT NULL default '0', + map_name varchar(32) NOT NULL default '', + display_order int(11) NOT NULL default '1', + start_position double(11,2) default NULL, + stop_position double(11,2) default NULL, + PRIMARY KEY (map_id), + UNIQUE KEY accession_id (accession_id), + UNIQUE KEY map_id (map_id,map_set_id,map_name,accession_id), + KEY map_set_id_index (map_set_id) + ) TYPE=MyISAM; + } # table + }, + + + cmap_map_set => { + table=>q{ + create table cmap_map_set ( + map_set_id int(11) NOT NULL default '0', + accession_id varchar(20) NOT NULL default '', + map_set_name varchar(64) NOT NULL default '', + short_name varchar(30) NOT NULL default '', + map_type_accession varchar(20) NOT NULL default '0', + species_id int(11) NOT NULL default '0', + published_on date default NULL, + can_be_reference_map tinyint(4) NOT NULL default '1', + display_order int(11) NOT NULL default '1', + is_enabled tinyint(4) NOT NULL default '1', + shape varchar(12) default NULL, + color varchar(20) default NULL, + width int(11) default NULL, + map_units varchar(12) NOT NULL default '', + is_relational_map tinyint(11) NOT NULL default '0', + PRIMARY KEY (map_set_id), + UNIQUE KEY accession_id (accession_id), + UNIQUE KEY map_set_id (map_set_id,species_id,short_name,accession_id), + KEY cmap_map_set_idx (can_be_reference_map,is_enabled,species_id,display_order,published_on,short_name) + ) TYPE=MyISAM; + } # table + }, + + + cmap_next_number => { + table=>q{ + create table cmap_next_number ( + table_name varchar(40) NOT NULL default '', + next_number int(11) NOT NULL default '0', + PRIMARY KEY (table_name) + ) TYPE=MyISAM; + } # table + }, + + + cmap_species => { + table=>q{ + create table cmap_species ( + species_id int(11) NOT NULL default '0', + accession_id varchar(20) NOT NULL default '', + common_name varchar(64) NOT NULL default '', + full_name varchar(64) NOT NULL default '', + display_order int(11) NOT NULL default '1', + PRIMARY KEY (species_id), + KEY acc_id_species_id (accession_id,species_id) + ) TYPE=MyISAM; + } # table + }, + + + cmap_xref => { + table=>q{ + create table cmap_xref ( + xref_id int(11) NOT NULL default '0', + table_name varchar(30) NOT NULL default '', + object_id int(11) default NULL, + display_order int(11) NOT NULL default '1', + xref_name varchar(200) NOT NULL default '', + xref_url text NOT NULL, + PRIMARY KEY (xref_id), + KEY table_name (table_name,object_id,display_order) + ) TYPE=MyISAM; + } # table + }, + + ); return \%schema; *************** *** 533,537 **** my $lookup_group = $dbh->prepare_delayed('SELECT feature_id FROM cmap_feature WHERE feature_name=? AND gclass=?'); ! my $insert_group = $dbh->prepare_delayed('INSERT INTO cmap_feature (feature_name,gclass) VALUES (?,?)'); my $lookup_attribute = $dbh->prepare_delayed('SELECT fattribute_id FROM fattribute WHERE fattribute_name=?'); --- 757,761 ---- my $lookup_group = $dbh->prepare_delayed('SELECT feature_id FROM cmap_feature WHERE feature_name=? AND gclass=?'); ! my $insert_group = $dbh->prepare_delayed(' insert into cmap_feature (feature_id, feature_name, gclass ) select next_number , ?,? from cmap_next_number where table_name=\'cmap_feature\';update cmap_next_number set next_number = next_number +1 where table_name=\'cmap_feature\''); my $lookup_attribute = $dbh->prepare_delayed('SELECT fattribute_id FROM fattribute WHERE fattribute_name=?'); *************** *** 549,554 **** $self->{load_stuff}{sth}{lookup_ftype} = $lookup_type; $self->{load_stuff}{sth}{insert_ftype} = $insert_type; ! $self->{load_stuff}{sth}{lookup_cmap_feature} = $lookup_group; ! $self->{load_stuff}{sth}{insert_cmap_feature} = $insert_group; $self->{load_stuff}{sth}{insert_fdata} = $insert_data; $self->{load_stuff}{sth}{lookup_fattribute} = $lookup_attribute; --- 773,778 ---- $self->{load_stuff}{sth}{lookup_ftype} = $lookup_type; $self->{load_stuff}{sth}{insert_ftype} = $insert_type; ! $self->{load_stuff}{sth}{lookup_fgroup} = $lookup_group; ! $self->{load_stuff}{sth}{insert_fgroup} = $insert_group; $self->{load_stuff}{sth}{insert_fdata} = $insert_data; $self->{load_stuff}{sth}{lookup_fattribute} = $lookup_attribute; *************** *** 808,811 **** --- 1032,1086 ---- } + =head2 create_cmap_viewer_link + + Title : create_cmap_viewer_link + Usage : $link_str = $db->create_cmap_viewer_link(data_source=>$ds,group_id=>$gid) + Function: + Returns : + Args : + Status : + + + =cut + + sub create_cmap_viewer_link { + my $self = shift; + my %args = @_; + my $data_source = $args{'data_source'}; + my $gid = $args{'group_id'}; + my $link_str = undef; + + my $db = $self->features_db; + my $sql_str = qq[ + select f.feature_name, + f.feature_type_accession feature_type_aid, + m.accession_id as map_aid, + ms.accession_id as map_set_aid + from cmap_feature f, + cmap_map m, + cmap_map_set ms + where f.map_id=m.map_id + and ms.map_set_id=m.map_set_id + and f.feature_id=$gid + ]; + + my $result_ref = $db->selectrow_hashref($sql_str,{ Columns => {} }); + + if ( $result_ref ) { + $link_str='/cgi-bin/cmap/viewer?ref_map_set_aid=' + . $result_ref->{'map_set_aid'} + . '&ref_map_aids=' + . $result_ref->{'map_aid'} + . '&data_source=' + . $data_source + . '&highlight=' + .$result_ref->{'feature_name'} + . '&feature_type_' + .$result_ref->{'feature_type_aid'} + . '=2'; + } + + return $link_str; + } 1; From faga at pub.open-bio.org Tue Mar 1 17:26:51 2005 From: faga at pub.open-bio.org (Ben faga) Date: Tue Mar 1 17:24:17 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/DB/GFF Feature.pm,1.70,1.71 Message-ID: <200503012226.j21MQpDT029588@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/DB/GFF In directory pub.open-bio.org:/tmp/cvs-serv29572/Bio/DB/GFF Modified Files: Feature.pm Log Message: Added a method to create a cmap link from a feature. Index: Feature.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/DB/GFF/Feature.pm,v retrieving revision 1.70 retrieving revision 1.71 diff -C2 -d -r1.70 -r1.71 *** Feature.pm 21 Jul 2004 13:02:29 -0000 1.70 --- Feature.pm 1 Mar 2005 22:26:49 -0000 1.71 *************** *** 1265,1268 **** --- 1265,1315 ---- } + =head2 cmap_link() + + Title : cmap_link + Usage : $link = $feature->cmap_link + Function: returns a URL link to the corresponding feature in cmap + Returns : a string + Args : none + Status : Public + + If integrated cmap/gbrowse installation, it returns a link to the map otherwise + it returns a link to a feature search on the feature name. See the cmap + documentation for more information. + + This function is intended primarily to be used in gbrowse conf files. + For example: + + link = sub {my $self = shift; return $self->cmap_viewer_link(data_source);} + + =cut + + + sub cmap_viewer_link { + # Use ONLY if CMap is installed + my $self = shift; + my $data_source = shift; + my $group_id = $self->group_id; + my $factory = $self->factory; # aka adaptor + + my $link_str; + + if ($factory->can("create_cmap_viewer_link")){ + $link_str = $factory->create_cmap_viewer_link( + data_source => $data_source, + group_id => $group_id, + ); + } + my $name = $self->name(); + $link_str = '/cgi-bin/cmap/feature_search?features=' + . $name + . '&search_field=feature_name&order_by=&data_source=' + . $data_source + . '&submit=Submit' + unless $link_str; + + return $link_str; + + } =head1 A Note About Similarities From valiente at pub.open-bio.org Tue Mar 1 20:33:42 2005 From: valiente at pub.open-bio.org (Gabriel Valiente) Date: Tue Mar 1 20:20:05 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Tree/Draw - New directory Message-ID: <200503020133.j221XgDT030109@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Tree/Draw In directory pub.open-bio.org:/tmp/cvs-serv30094/Draw Log Message: Directory /home/repository/bioperl/bioperl-live/Bio/Tree/Draw added to the repository From valiente at pub.open-bio.org Tue Mar 1 20:36:58 2005 From: valiente at pub.open-bio.org (Gabriel Valiente) Date: Tue Mar 1 20:23:16 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Tree/Draw Cladogram.pm,NONE,1.1 Message-ID: <200503020136.j221awDT030180@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Tree/Draw In directory pub.open-bio.org:/tmp/cvs-serv30165/Draw Added Files: Cladogram.pm Log Message: Cladogram moved to Bio/Tree/Draw directory --- NEW FILE: Cladogram.pm --- # $Id: Cladogram.pm,v 1.1 2005/03/02 01:36:56 valiente Exp $ # # BioPerl module for Cladogram # # Cared for by Gabriel Valiente # # Copyright Gabriel Valiente # # You may distribute this module under the same terms as Perl itself # POD documentation - main docs before the code =head1 NAME Bio::Tree::Draw::Cladogram - Drawing phylogenetic trees in Encapsulated PostScript (EPS) format. =head1 SYNOPSIS use Bio::Tree::Draw::Cladogram; use Bio::TreeIO; my $treeio = new Bio::TreeIO('-format' => 'newick', '-file' => 'input.nwk'); my $t1 = $treeio->next_tree; my $t2 = $treeio->next_tree; my $obj1 = new Bio::Tree::Draw::Cladogram(-tree => $t1); $obj1->print(-file => 'cladogram.eps'); if ($t2) { my $obj2 = new Bio::Tree::Draw::Cladogram(-tree => $t1, -second => $t2); $obj2->print(-file => 'tanglegram.eps'); } =head1 DESCRIPTION Bio::Tree::Draw::Cladogram is a Perl tool for drawing Bio::Tree::Tree objects in Encapsulated PostScript (EPS) format. It can be utilized both for displaying a single phylogenetic tree (a cladogram) and for the comparative display of two phylogenetic trees (a tanglegram) such as a gene tree and a species tree, a host tree and a parasite tree, two alternative trees for the same set of taxa, or two alternative trees for overlapping sets of taxa. Phylogenetic trees are drawn as rectangular cladograms, with horizontal orientation and ancestral nodes centered over their descendents. The font used for taxa is Courier at 10 pt. A single Bio::Tree::Tree object is drawn with ancestors to the left and taxa flushed to the right. Two Bio::Tree::Tree objects are drawn with the first tree oriented left-to-right and the second tree oriented right-to-left, and with corresponding taxa connected by straight lines in a shade of gray. Each correspondence between a $taxon1 of the first tree and a $taxon2 of the second tree is established by setting $taxon1->add_tag_value('connection',$taxon2). Thus, a taxon of the first tree can be connected to more than one taxon of the second tree, and vice versa. This is a preliminary release of Bio::Tree::Draw::Cladogram. Future improvements include an option to output phylograms instead of cladograms. Beware that cladograms are automatically scaled according to branch lengths, but the current release has only been tested with trees having unit branch lengths. The print method could be extended to output graphic formats other than EPS, although there are many graphics conversion programs around that accept EPS input. For instance, most Linux distributions include epstopdf, a Perl script that together with Ghostscript, converts EPS to PDF. =head1 FEEDBACK =head2 Mailing Lists User feedback is an integral part of the evolution of this and other Bioperl modules. Send your comments and suggestions preferably to the Bioperl mailing list. Your participation is much appreciated. bioperl-l@bioperl.org - General discussion http://bioperl.org/MailList.shtml - About the mailing lists =head2 Reporting Bugs Report bugs to the Bioperl bug tracking system to help us keep track of the bugs and their resolution. Bug reports can be submitted via the web: http://bugzilla.bioperl.org/ =head1 AUTHOR - Gabriel Valiente Email valiente@lsi.upc.edu =head1 APPENDIX The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _ =cut package Bio::Tree::Draw::Cladogram; use vars qw(@ISA); use strict; # Object preamble - inherits from Bio::Root::Root use Bio::Root::Root; use PostScript::TextBlock; @ISA = qw(Bio::Root::Root); # The following private package variables are set by the new method # and used by the print method. my %xx; # horizontal coordinate for each node my %yy; # vertical coordinate for each node my $t1; # first Bio::Tree::Tree object my $t2; # second Bio::Tree::Tree object my $font; # font name my $size; # font size my $width; # total drawing width my $height; # total drawing height my $xstep; # branch length in drawing my $tip; # extra space between tip and label my $tipwidth1; # width of longest label among $t1 taxa my $tipwidth2; # width of longest label among $t2 taxa =head2 new Title : new Usage : my $obj = new Bio::Tree::Draw::Cladogram(); Function: Builds a new Bio::Tree::Draw::Cladogram object Returns : Bio::Tree::Draw::Cladogram Args : -tree => Bio::Tree::Tree object -second => Bio::Tree::Tree object (optional) -font => font name [string] (optional) -size => font size [integer] (optional) -top => top margin [integer] (optional) -bottom => bottom margin [integer] (optional) -left => left margin [integer] (optional) -right => right margin [integer] (optional) -tip => extra tip space [integer] (optional) -column => extra space between cladograms [integer] (optional) =cut sub new { my($class,@args) = @_; my $self = $class->SUPER::new(@args); ($t1, $t2, $font, $size, my $top, my $bottom, my $left, my $right, $tip, my $column) = $self->_rearrange([qw(TREE SECOND FONT SIZE TOP BOTTOM LEFT RIGHT TIP COLUMN)], @args); $font ||= "Helvetica-Narrow"; $size ||= 12; $top ||= 10; $bottom ||= 10; $left ||= 10; $right ||= 10; $tip ||= 5; $column ||= 60; # Roughly, a cladogram is set according to the following parameters. ################################# # # T # $top (T, top margin) # +---------+ XXX # # $bottom (B, bottom margin) # | # # $left (L, left margin) # | # # $right (R, right margin) # +----+ # # $tip (X, extra tip space) # | +----+ XXXX # # $width (total drawing width) # | | # # $height (total drawing height) # +----+ # Y # $xstep (S, stem length) # | # # $ystep (Y, space between taxa) # +----+ XX # # $tiplen (string length of longest name) # # B # $tipwidth (N, size of longest name) ################################# # L S X N R # ############################# # A tanglegram is roughly set as follows. The only additional # parameter is $column (C, length of connection lines between taxa # of the two trees), but $tip occurs four times, and $tiplen and # $tipwidth differ for the first and the second tree. ########################################################### # # # +---------+ XXX ----- XXXXXX +----+ # # | | # # | +----+ # # +----+ | | # # | +----+ XXXX ----- XXX +----+ | # # | | +----+ # # +----+ | # # | | # # +----+ XX ----- XXXX +---------+ # # # ########################################################### # L X X C X X R # ########################################################### # An alternative would be to let the user set $width and $height in # points and to scale down everything to fit the desired # dimensions. However, the final EPS can later be scaled down to any # desired size anyway. my @taxa1 = $t1->get_leaf_nodes; my $root1 = $t1->get_root_node; $tipwidth1 = 0; foreach my $taxon (@taxa1) { my $w = PostScript::Metrics::stringwidth($taxon->id,$font,$size); if ($w > $tipwidth1) { $tipwidth1 = $w; } } my @taxa2; my $root2; my $ystep = 20; if ($t2) { @taxa2 = $t2->get_leaf_nodes; $root2 = $t2->get_root_node; $tipwidth2 = 0; foreach my $taxon (@taxa2) { my $w = PostScript::Metrics::stringwidth($taxon->id,$font,$size); if ($w > $tipwidth2) { $tipwidth2 = $w; } } } my $stems = $root1->height + 1; if ($t2) { $stems += $root2->height + 1; } my $labels = $tipwidth1; if ($t2) { $labels += $tipwidth2; } $xstep = 20; $width = $left + $stems * $xstep + $tip + $labels + $right; if ($t2) { $width += $tip + $column + $tip + $tip; } $height = $bottom + $ystep * (@taxa1 - 1) + $top; if ($t2) { if ( scalar(@taxa2) > scalar(@taxa1) ) { $height = $bottom + $ystep * (@taxa2 - 1) + $top; } } my $ystep1 = $height / scalar(@taxa1); my $ystep2; if ($t2) { $ystep2 = $height / scalar(@taxa2); } my $x = $left + $xstep * ($root1->height + 1) + $tip; my $y = $bottom; for my $taxon (reverse @taxa1) { $xx{$taxon} = $x - $tip; $yy{$taxon} = $y; $y += $ystep1; } $x -= $xstep; my @stack; my @queue; # postorder traversal push @stack, $t1->get_root_node; while (@stack) { my $node = pop @stack; push @queue, $node; foreach my $child ($node->each_Descendent(-sortby => 'internal_id')) { push @stack, $child; } } @queue = reverse @queue; for my $node (@queue) { if (!$node->is_Leaf) { my $xmin = 1000; my $ymin = 1000; my $ymax = 0; foreach my $child ($node->each_Descendent) { $xmin = $xx{$child} if $xx{$child} < $xmin; $ymax = $yy{$child} if $yy{$child} > $ymax; $ymin = $yy{$child} if $yy{$child} < $ymin; } $xx{$node} = $xmin - $xstep; $yy{$node} = ($ymin + $ymax)/2; } } if ($t2) { $x = $left + $xstep * ($root1->height + 1) + $tip; $x += $tipwidth1 + $tip + $column + $tip; my $y = $bottom; for my $taxon (reverse @taxa2) { $xx{$taxon} = $x + $tipwidth2 + $tip; $yy{$taxon} = $y; $y += $ystep2; } $x += $xstep; my @stack; my @queue; # postorder traversal push @stack, $t2->get_root_node; while (@stack) { my $node = pop @stack; push @queue, $node; foreach my $child ($node->each_Descendent(-sortby => 'internal_id')) { push @stack, $child; } } @queue = reverse @queue; for my $node (@queue) { if (!$node->is_Leaf) { my $xmax = 0; my $ymin = 1000; my $ymax = 0; foreach my $child ($node->each_Descendent) { $xmax = $xx{$child} if $xx{$child} > $xmax; $ymax = $yy{$child} if $yy{$child} > $ymax; $ymin = $yy{$child} if $yy{$child} < $ymin; } $xx{$node} = $xmax + $xstep; $yy{$node} = ($ymin + $ymax)/2; } } } return $self; } =head2 print Title : print Usage : $obj->print(); Function: Outputs $obj in Encapsulated PostScript (EPS) format Returns : Args : -file => filename (optional) =cut sub print { my($self,@args) = @_; my ($file) = $self->_rearrange([qw(FILE)], @args); $file ||= "output.eps"; # stdout open(INFO,">$file"); print INFO "%!PS-Adobe-\n"; print INFO "%%BoundingBox: 0 0 ", $width, " ", $height, "\n"; print INFO "1 setlinewidth\n"; print INFO "/$font findfont\n"; print INFO "$size scalefont\n"; print INFO "setfont\n"; # taxa labels are centered to 1/3 the font size for my $taxon (reverse $t1->get_leaf_nodes) { print INFO $xx{$taxon} + $tip, " ", $yy{$taxon} - $size / 3, " moveto\n"; print INFO "(", $taxon->id, ") show\n"; } my $root1 = $t1->get_root_node; for my $node ($t1->get_nodes) { if ($node->ancestor) { # print $xx{$node->ancestor}, " ", $yy{$node->ancestor}, " moveto\n"; # print $xx{$node}, " ", $yy{$node}, " lineto\n"; print INFO $xx{$node}, " ", $yy{$node}, " moveto\n"; print INFO $xx{$node->ancestor}, " ", $yy{$node}, " lineto\n"; print INFO $xx{$node->ancestor}, " ", $yy{$node->ancestor}, " lineto\n"; } } my $ymin = 1000; my $ymax = 0; foreach my $child ($root1->each_Descendent) { $ymax = $yy{$child} if $yy{$child} > $ymax; $ymin = $yy{$child} if $yy{$child} < $ymin; } my $zz = ($ymin + $ymax)/2; print INFO $xx{$root1}, " ", $zz, " moveto\n"; print INFO $xx{$root1} - $xstep, " ", $zz, " lineto\n"; if ($t2) { for my $taxon (reverse $t2->get_leaf_nodes) { my $tiplen2 = PostScript::Metrics::stringwidth($taxon->id,$font,$size); print INFO $xx{$taxon} - $tiplen2 - $tip, " ", $yy{$taxon} - $size / 3, " moveto\n"; printf INFO "(%s) show\n", $taxon->id; } for my $node ($t2->get_nodes) { if ($node->ancestor) { print INFO $xx{$node}, " ", $yy{$node}, " moveto\n"; print INFO $xx{$node->ancestor}, " ", $yy{$node}, " lineto\n"; print INFO $xx{$node->ancestor}, " ", $yy{$node->ancestor}, " lineto\n"; } } my $root2 = $t2->get_root_node; my $ymin = 1000; my $ymax = 0; foreach my $child2 ($root2->each_Descendent) { $ymax = $yy{$child2} if $yy{$child2} > $ymax; $ymin = $yy{$child2} if $yy{$child2} < $ymin; } my $zz = ($ymin + $ymax)/2; print INFO $xx{$root2}, " ", $zz, " moveto\n"; print INFO $xx{$root2} + $xstep, " ", $zz, " lineto\n"; my @taxa1 = $t1->get_leaf_nodes; my @taxa2 = $t2->get_leaf_nodes; # set default connection between $t1 and $t2 taxa, unless # overridden by the user (the latter not implemented yet) foreach my $taxon1 (@taxa1) { foreach my $taxon2 (@taxa2) { if ($taxon1->id eq $taxon2->id) { $taxon1->add_tag_value('connection',$taxon2); last; } } } # draw connection lines between $t1 and $t2 taxa print INFO "stroke\n"; print INFO "0.5 setgray\n"; foreach my $taxon1 (@taxa1) { my @match = $taxon1->get_tag_values('connection'); foreach my $taxon2 (@match) { my $x0 = $xx{$taxon1} + $tip + PostScript::Metrics::stringwidth($taxon1->id,$font,$size) + $tip; my $x1 = $xx{$taxon1} + $tip + $tipwidth1 + $tip; my $y1 = $yy{$taxon1}; my $x2 = $xx{$taxon2} - $tip - $tipwidth2 - $tip; my $x3 = $xx{$taxon2} - $tip - PostScript::Metrics::stringwidth($taxon2->id,$font,$size) - $tip; my $y2 = $yy{$taxon2}; print INFO $x0, " ", $y1, " moveto\n"; print INFO $x1, " ", $y1, " lineto\n"; print INFO $x2, " ", $y2, " lineto\n"; print INFO $x3, " ", $y2, " lineto\n"; } } } print INFO "stroke\n"; print INFO "showpage\n"; close(INFO); } 1; From allenday at pub.open-bio.org Tue Mar 1 20:38:39 2005 From: allenday at pub.open-bio.org (Allen Day) Date: Tue Mar 1 20:24:51 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts/utilities search2gff.PLS, 1.11, 1.12 Message-ID: <200503020138.j221cdDT030221@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts/utilities In directory pub.open-bio.org:/tmp/cvs-serv30212/scripts/utilities Modified Files: search2gff.PLS Log Message: typo fix Index: search2gff.PLS =================================================================== RCS file: /home/repository/bioperl/bioperl-live/scripts/utilities/search2gff.PLS,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** search2gff.PLS 19 Jul 2004 01:11:02 -0000 1.11 --- search2gff.PLS 2 Mar 2005 01:38:37 -0000 1.12 *************** *** 134,138 **** $name ||= $hit->name; } else { ! ($other,$proxyfor) = ($hsp->query, $hsp->hit); $name ||= $acc; --- 134,138 ---- $name ||= $hit->name; } else { ! ($otherf,$proxyfor) = ($hsp->query, $hsp->hit); $name ||= $acc; From redwards at pub.open-bio.org Tue Mar 1 20:52:46 2005 From: redwards at pub.open-bio.org (Robert Edwards) Date: Tue Mar 1 20:38:56 2005 Subject: [Bioperl-guts-l] bioperl-run/Bio/Tools/Run Primer3.pm,1.7,1.8 Message-ID: <200503020152.j221qkDT030290@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-run/Bio/Tools/Run In directory pub.open-bio.org:/tmp/cvs-serv30275/bioperl-run/Bio/Tools/Run Modified Files: Primer3.pm Log Message: minor change to program_dir in Bio::Tools::Run::Primer3 which could never be set and then checked later Index: Primer3.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-run/Bio/Tools/Run/Primer3.pm,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Primer3.pm 20 Oct 2004 02:44:39 -0000 1.7 --- Primer3.pm 2 Mar 2005 01:52:44 -0000 1.8 *************** *** 272,278 **** Title : program_dir ! Usage : $factory->program_dir(@params) ! Function: returns the program directory, obtiained from ENV variable. ! Returns: string Args : --- 272,278 ---- Title : program_dir ! Usage : $primer3->program_dir($dir) ! Function: returns the program directory, which may also be obtained from ENV variable. ! Returns : string Args : *************** *** 280,292 **** sub program_dir { ! my ($self, $dir) = @_; ! if ($dir) { $self->{'program_dir'}=$dir; ! } elsif ($ENV{PRIMER3}) { $self->{'program_dir'}=Bio::Root::IO->catfile($ENV{PRIMER3}); ! } else { $self->{'program_dir'}='/usr/local/bin'; ! } ! return $self->{'program_dir'} } --- 280,298 ---- sub program_dir { ! my ($self, $dir) = @_; ! if ($dir) { $self->{'program_dir'}=$dir; ! } ! ! # we need to stop here if we know what the answer is, otherwise we can never set it and then call it later ! return $self->{'program_dir'} if $self->{'program_dir'}; ! ! if ($ENV{PRIMER3}) { $self->{'program_dir'}=Bio::Root::IO->catfile($ENV{PRIMER3}); ! } else { $self->{'program_dir'}='/usr/local/bin'; ! } ! ! return $self->{'program_dir'} } From redwards at pub.open-bio.org Tue Mar 1 21:26:33 2005 From: redwards at pub.open-bio.org (Robert Edwards) Date: Tue Mar 1 21:14:34 2005 Subject: [Bioperl-guts-l] bioperl-run/Bio/Tools/Run Primer3.pm,1.8,1.9 Message-ID: <200503020226.j222QXDT030497@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-run/Bio/Tools/Run In directory pub.open-bio.org:/tmp/cvs-serv30482/bioperl-run/Bio/Tools/Run Modified Files: Primer3.pm Log Message: minor change to included_region in Bio::Tools::Run::Primer3 to make default set correctly Index: Primer3.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-run/Bio/Tools/Run/Primer3.pm,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Primer3.pm 2 Mar 2005 01:52:44 -0000 1.8 --- Primer3.pm 2 Mar 2005 02:26:31 -0000 1.9 *************** *** 335,345 **** if (uc($key) eq "INCLUDED_REGION") { # this must be a comma separated start, length. ! unless ($args{$key} =~ /\,/) { ! my $sequencelength; ! # we don't have a length, hence we need to add the length of the ! # sequence less the start. ! foreach my $input (@$inputarray) { ! if ($input =~ /SEQUENCE=(.*)/) {$sequencelength=length($1)} ! } my $length_of_included = $sequencelength-$args{$key}; $args{$key} .= ",".$length_of_included; --- 335,347 ---- if (uc($key) eq "INCLUDED_REGION") { # this must be a comma separated start, length. ! my $sequencelength; ! # we don't have a length, hence we need to add the length of the ! # sequence less the start. ! foreach my $input (@$inputarray) { ! if ($input =~ /SEQUENCE=(.*)/) {$sequencelength=length($1)} ! } ! ! if (!$args{$key}) {$args{$key}="0," . $sequencelength} ! elsif ($args{$key} !~ /\,/) { my $length_of_included = $sequencelength-$args{$key}; $args{$key} .= ",".$length_of_included; From valiente at pub.open-bio.org Tue Mar 1 21:16:59 2005 From: valiente at pub.open-bio.org (Gabriel Valiente) Date: Tue Mar 1 21:23:46 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Tree/Draw Cladogram.pm,1.3,1.4 Message-ID: <200503020216.j222GxDT030459@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Tree/Draw In directory pub.open-bio.org:/tmp/cvs-serv30444/Bio/Tree/Draw Modified Files: Cladogram.pm Log Message: A Cladogram and Tanglegram drawing module Index: Cladogram.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Tree/Draw/Cladogram.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Cladogram.pm 13 Jan 2005 13:35:02 -0000 1.3 --- Cladogram.pm 2 Mar 2005 02:16:57 -0000 1.4 *************** *** 30,34 **** if ($t2) { my $obj2 = new Bio::Tree::Draw::Cladogram(-tree => $t1, -second => $t2); ! $obj2->print(-file => 'comparative.eps'); } --- 30,34 ---- if ($t2) { my $obj2 = new Bio::Tree::Draw::Cladogram(-tree => $t1, -second => $t2); ! $obj2->print(-file => 'tanglegram.eps'); } *************** *** 57,65 **** This is a preliminary release of Bio::Tree::Draw::Cladogram. Future ! improvements include a better placement of taxa names, an option to ! choose a font and size other than Courier at 10 pt, and an option to ! output phylograms instead of cladograms. Beware that cladograms are ! automatically scaled according to branch lengths, but the current ! release has only been tested with trees having unit branch lengths. The print method could be extended to output graphic formats other --- 57,64 ---- This is a preliminary release of Bio::Tree::Draw::Cladogram. Future ! improvements include an option to output phylograms instead of ! cladograms. Beware that cladograms are automatically scaled according ! to branch lengths, but the current release has only been tested with ! trees having unit branch lengths. The print method could be extended to output graphic formats other *************** *** 106,109 **** --- 105,109 ---- use Bio::Root::Root; + use PostScript::TextBlock; @ISA = qw(Bio::Root::Root); *************** *** 116,119 **** --- 116,121 ---- my $t1; # first Bio::Tree::Tree object my $t2; # second Bio::Tree::Tree object + my $font; # font name + my $size; # font size my $width; # total drawing width my $height; # total drawing height *************** *** 122,126 **** my $tipwidth1; # width of longest label among $t1 taxa my $tipwidth2; # width of longest label among $t2 taxa - my $tiplen2; # number of characters of longest label among $t2 taxa =head2 new --- 124,127 ---- *************** *** 132,136 **** Args : -tree => Bio::Tree::Tree object -second => Bio::Tree::Tree object (optional) ! -aspect => width to height ratio [real] (optional) -top => top margin [integer] (optional) -bottom => bottom margin [integer] (optional) --- 133,138 ---- Args : -tree => Bio::Tree::Tree object -second => Bio::Tree::Tree object (optional) ! -font => font name [string] (optional) ! -size => font size [integer] (optional) -top => top margin [integer] (optional) -bottom => bottom margin [integer] (optional) *************** *** 146,153 **** my $self = $class->SUPER::new(@args); ! ($t1, $t2, my $aspect, my $top, my $bottom, my $left, my $right, ! $tip, my $column) = $self->_rearrange([qw(TREE SECOND ASPECT TOP BOTTOM LEFT RIGHT TIP COLUMN)], @args); ! $aspect ||= 2/(sqrt 5+1); # golden ratio $top ||= 10; $bottom ||= 10; --- 148,156 ---- my $self = $class->SUPER::new(@args); ! ($t1, $t2, $font, $size, my $top, my $bottom, my $left, my $right, ! $tip, my $column) = $self->_rearrange([qw(TREE SECOND FONT SIZE TOP BOTTOM LEFT RIGHT TIP COLUMN)], @args); ! $font ||= "Helvetica-Narrow"; ! $size ||= 12; $top ||= 10; $bottom ||= 10; *************** *** 167,175 **** # | +----+ XXXX # # $width (total drawing width) # | | # # $height (total drawing height) ! # +----+ # Y # $aspect ($width / $height) ! # | # # $xstep (S, stem length) ! # +----+ XX # # $ystep (Y, space between taxa) ! # # B # $tiplen (string length of longest name) ! ################################# $tipwidth (N, size of longest name) # L S X N R # ############################# --- 170,178 ---- # | +----+ XXXX # # $width (total drawing width) # | | # # $height (total drawing height) ! # +----+ # Y # $xstep (S, stem length) ! # | # # $ystep (Y, space between taxa) ! # +----+ XX # # $tiplen (string length of longest name) ! # # B # $tipwidth (N, size of longest name) ! ################################# # L S X N R # ############################# *************** *** 204,210 **** my $root1 = $t1->get_root_node; ! my $tiplen1 = 0; foreach my $taxon (@taxa1) { ! if (length $taxon->id > $tiplen1) { $tiplen1 = length $taxon->id; } } --- 207,214 ---- my $root1 = $t1->get_root_node; ! $tipwidth1 = 0; foreach my $taxon (@taxa1) { ! my $w = PostScript::Metrics::stringwidth($taxon->id,$font,$size); ! if ($w > $tipwidth1) { $tipwidth1 = $w; } } *************** *** 212,258 **** my $root2; ! my $ystep = 10; ! $tipwidth1 = 6 * $tiplen1; # assuming a char is 6 points wide if ($t2) { @taxa2 = $t2->get_leaf_nodes; $root2 = $t2->get_root_node; ! $tiplen2 = 0; foreach my $taxon (@taxa2) { ! $tiplen2 = length $taxon->id if (length $taxon->id > $tiplen2); ! } ! $tipwidth2 = 6 * $tiplen2; # assuming a char is 6 points wide ! } ! ! my $depth = $root1->height + 1; ! $height = $bottom + $ystep * (@taxa1 - 1) + $top; ! ! $width = $aspect * $height + 200; ! $width -= ($left + $tip + $tipwidth1 + $right); ! ! if ($t2) { ! $width -= ($tip + $column + $tip + $tipwidth2 + $tip); ! $depth += $root2->height + 1; ! } ! ! $xstep = $width / $depth; ! ! $width = $left + $tipwidth1 + $tip + $xstep * $depth + $right; ! $height = $bottom + $ystep * (@taxa1 - 1) + $top; ! if ($t2) { ! $width += $tip + $column + $tip + $tipwidth2 + $tip; ! if ( scalar(@taxa2) > scalar(@taxa1) ) { ! $height = $bottom + $ystep * (@taxa2 - 1) + $top; } } - ########################################################################### - # A problem with this approach is that for long taxa names, stems - # can be much too short (even of negative length) in order to - # achieve the desired aspect ratio. The following solution consists - # of setting $xstep (the stem length) to an absolute length and - # rescaling $ystep (the vertical space between taxa names) to achive - # the desired aspect ratio. - ########################################################################### my $stems = $root1->height + 1; if ($t2) { $stems += $root2->height + 1; } --- 216,231 ---- my $root2; ! my $ystep = 20; if ($t2) { @taxa2 = $t2->get_leaf_nodes; $root2 = $t2->get_root_node; ! $tipwidth2 = 0; foreach my $taxon (@taxa2) { ! my $w = PostScript::Metrics::stringwidth($taxon->id,$font,$size); ! if ($w > $tipwidth2) { $tipwidth2 = $w; } } } my $stems = $root1->height + 1; if ($t2) { $stems += $root2->height + 1; } *************** *** 262,266 **** $width = $left + $stems * $xstep + $tip + $labels + $right; if ($t2) { $width += $tip + $column + $tip + $tip; } ! $height = $aspect * $width; my $ystep1 = $height / scalar(@taxa1); my $ystep2; --- 235,244 ---- $width = $left + $stems * $xstep + $tip + $labels + $right; if ($t2) { $width += $tip + $column + $tip + $tip; } ! $height = $bottom + $ystep * (@taxa1 - 1) + $top; ! if ($t2) { ! if ( scalar(@taxa2) > scalar(@taxa1) ) { ! $height = $bottom + $ystep * (@taxa2 - 1) + $top; ! } ! } my $ystep1 = $height / scalar(@taxa1); my $ystep2; *************** *** 268,272 **** $ystep2 = $height / scalar(@taxa2); } - ########################################################################### my $x = $left + $xstep * ($root1->height + 1) + $tip; --- 246,249 ---- *************** *** 372,383 **** print INFO "%%BoundingBox: 0 0 ", $width, " ", $height, "\n"; print INFO "1 setlinewidth\n"; ! print INFO "/Courier findfont\n"; ! print INFO "10 scalefont\n"; print INFO "setfont\n"; ! # taxa labels are centered assuming text is 8 points tall for my $taxon (reverse $t1->get_leaf_nodes) { ! print INFO $xx{$taxon} + $tip, " ", $yy{$taxon} - 3, " moveto\n"; print INFO "(", $taxon->id, ") show\n"; } --- 349,360 ---- print INFO "%%BoundingBox: 0 0 ", $width, " ", $height, "\n"; print INFO "1 setlinewidth\n"; ! print INFO "/$font findfont\n"; ! print INFO "$size scalefont\n"; print INFO "setfont\n"; ! # taxa labels are centered to 1/3 the font size for my $taxon (reverse $t1->get_leaf_nodes) { ! print INFO $xx{$taxon} + $tip, " ", $yy{$taxon} - $size / 3, " moveto\n"; print INFO "(", $taxon->id, ") show\n"; } *************** *** 406,413 **** for my $taxon (reverse $t2->get_leaf_nodes) { ! print INFO $xx{$taxon} - $tipwidth2 - $tip, " ", ! $yy{$taxon} - 3, " moveto\n"; ! my $format = "(%" . $tiplen2 . "s) show\n"; ! printf INFO $format, $taxon->id; } --- 383,390 ---- for my $taxon (reverse $t2->get_leaf_nodes) { ! my $tiplen2 = PostScript::Metrics::stringwidth($taxon->id,$font,$size); ! print INFO $xx{$taxon} - $tiplen2 - $tip, " ", ! $yy{$taxon} - $size / 3, " moveto\n"; ! printf INFO "(%s) show\n", $taxon->id; } *************** *** 455,464 **** my @match = $taxon1->get_tag_values('connection'); foreach my $taxon2 (@match) { my $x1 = $xx{$taxon1} + $tip + $tipwidth1 + $tip; my $y1 = $yy{$taxon1}; my $x2 = $xx{$taxon2} - $tip - $tipwidth2 - $tip; my $y2 = $yy{$taxon2}; ! print INFO $x1, " ", $y1, " moveto\n"; print INFO $x2, " ", $y2, " lineto\n"; } } --- 432,447 ---- my @match = $taxon1->get_tag_values('connection'); foreach my $taxon2 (@match) { + my $x0 = $xx{$taxon1} + $tip + + PostScript::Metrics::stringwidth($taxon1->id,$font,$size) + $tip; my $x1 = $xx{$taxon1} + $tip + $tipwidth1 + $tip; my $y1 = $yy{$taxon1}; my $x2 = $xx{$taxon2} - $tip - $tipwidth2 - $tip; + my $x3 = $xx{$taxon2} - $tip + - PostScript::Metrics::stringwidth($taxon2->id,$font,$size) - $tip; my $y2 = $yy{$taxon2}; ! print INFO $x0, " ", $y1, " moveto\n"; ! print INFO $x1, " ", $y1, " lineto\n"; print INFO $x2, " ", $y2, " lineto\n"; + print INFO $x3, " ", $y2, " lineto\n"; } } From jason at pub.open-bio.org Tue Mar 1 22:38:10 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Tue Mar 1 22:25:05 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Tools/Phylo PAML.pm,1.25,1.26 Message-ID: <200503020338.j223cADT030726@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Tools/Phylo In directory pub.open-bio.org:/tmp/cvs-serv30710/Bio/Tools/Phylo Modified Files: PAML.pm Log Message: updated for parsing branch-specific parameters. These are now added to the Tree objects. Example SYNOPSIS code and script coming Index: PAML.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Tools/Phylo/PAML.pm,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** PAML.pm 5 Nov 2004 22:44:45 -0000 1.25 --- PAML.pm 2 Mar 2005 03:38:07 -0000 1.26 *************** *** 226,230 **** my ($self) = @_; ! my %data; # get the various codon and other sequence summary data, if necessary: $self->_parse_summary --- 226,231 ---- my ($self) = @_; ! my %data; ! my $idlookup; # a hashreference to SEQID (number) ==> 'SEQUENCENAME' # get the various codon and other sequence summary data, if necessary: $self->_parse_summary *************** *** 237,241 **** if ($seqtype eq 'CODONML' && m/^pairwise comparison, codon frequencies:/) { - # runmode = -2, CODONML $self->_pushback($_); --- 238,241 ---- *************** *** 249,262 **** # %data = $self->_parse_PairwiseAA; # last; ! } elsif (m/^Model\s+(\d+)/) { $self->_pushback($_); my $model = $self->_parse_NSsitesBatch; push @{$data{'-NSsitesresults'}}, $model; } elsif (m/^TREE/) { # runmode = 0 $self->_pushback($_); ! $data{'-trees'} = [$self->_parse_Forestry]; ! last; ! } elsif (m/Heuristic tree search by stepwise addition$/ ) { --- 249,300 ---- # %data = $self->_parse_PairwiseAA; # last; ! } elsif (m/^Model\s+(\d+)/ ) { $self->_pushback($_); my $model = $self->_parse_NSsitesBatch; push @{$data{'-NSsitesresults'}}, $model; + } elsif ( m/for each branch/ ) { + my %branch_dnds = $self->_parse_branch_dnds; + if( ! defined $data{'-trees'} ) { + warn("No trees have been loaded, can't do anything\n"); + next; + } + my ($tree) = @{$data{'-trees'}}; + if( ! $tree || ! ref($tree) || + ! $tree->isa('Bio::Tree::Tree') ) { + warn("no tree object already stored!\n"); + next; + } + # These need to be added to the Node/branches + while( my ($k,$v) = each %branch_dnds) { + # we can probably do better by caching at some point + my @nodes; + for my $id ( split(/\.\./,$k ) ) { + my @nodes_L = map { $tree->find_node(-id => $_) } + @{$idlookup->{$id}}; + while( @nodes_L > 1 ) { + my $lca = $tree->get_lca + (-nodes => [shift @nodes_L, + shift @nodes_L]); + push @nodes_L, $lca; + } + my $n = shift @nodes_L; + if( ! $n ) { + warn("no node for $n\n"); + } + unless( $n->is_Leaf && $n->id) { + $n->id($id); + } + push @nodes, $n; + } + my ($parent,$child) = @nodes; + while ( my ($kk,$vv) = each %$v ) { + $child->add_tag_value($kk,$vv); + } + } } elsif (m/^TREE/) { # runmode = 0 $self->_pushback($_); ! ($data{'-trees'},$idlookup) = $self->_parse_Forestry; ! #last; } elsif (m/Heuristic tree search by stepwise addition$/ ) { *************** *** 304,308 **** } elsif( /^TREE/ ) { $self->_pushback($_); ! $data{'-trees'} = [$self->_parse_Forestry]; } } --- 342,346 ---- } elsif( /^TREE/ ) { $self->_pushback($_); ! ($data{'-trees'},$idlookup) = $self->_parse_Forestry; } } *************** *** 674,679 **** $seqct++; } ! $self->{'_summary'}->{'seqs'} = \@seqs ! if($self->{'_summary'}->{'seqtype'} eq 'YN00' && @seqs ); 1; } --- 712,719 ---- $seqct++; } ! if($self->{'_summary'}->{'seqtype'} eq 'YN00' && @seqs ){ ! $self->{'_summary'}->{'seqs'} = \@seqs; ! } ! 1; } *************** *** 766,773 **** my @trees; my $okay = 0; while( defined ($_ = $self->_readline) ) { last if $done; ! if( /^TREE/ ) { ! ($score) = (/MP\s+score\:\s+(\S+)/ ); } elsif( /^Node\s+\&/ || /^\s+N37/ || /^(CODONML|AAML|YN00|BASEML)/ || /^\*\*/ || /^Detailed output identifying parameters/) { --- 806,815 ---- my @trees; my $okay = 0; + my (@ids,%match,@branches); while( defined ($_ = $self->_readline) ) { last if $done; ! if( s/^TREE\s+\#\s*\d+:\s+// ) { ! ($score) = (s/MP\s+score\:\s+(\S+)\s+$// ); ! @ids = /(\d+)[\,\)]/g; } elsif( /^Node\s+\&/ || /^\s+N37/ || /^(CODONML|AAML|YN00|BASEML)/ || /^\*\*/ || /^Detailed output identifying parameters/) { *************** *** 782,806 **** $loglikelihood = $1; } elsif( /^\(/) { ! if( $okay > 0 ) { ! s/([\,:])\s+/$1/g; ! my $treestr = new IO::String($_); ! my $treeio = new Bio::TreeIO(-fh => $treestr, ! -format => 'newick'); ! my $tree = $treeio->next_tree; ! if( $tree ) { ! $tree->score($loglikelihood); push @trees, $tree; } ! last; } $okay++; ! } } ! return @trees; } sub _parse_NSsitesBatch { my $self = shift; ! my %data; my ($okay,$done) =(0,0); while( defined($_ = $self->_readline) ) { --- 824,871 ---- $loglikelihood = $1; } elsif( /^\(/) { ! s/([\,:])\s+/$1/g; ! my $treestr = new IO::String($_); ! my $treeio = new Bio::TreeIO(-fh => $treestr, ! -format => 'newick'); ! my $tree = $treeio->next_tree; ! if( $tree ) { ! $tree->score($loglikelihood); ! if( $okay > 0 ) { ! # we don't save the trees with the number labels ! if( ! %match && @ids) { ! my $i = 0; ! for my $m ( /([^():,]+):/g ) { ! $match{shift @ids} = [$m]; ! } ! my %grp; ! while ( my $br = shift @branches ) { ! my ($parent,$child) = @$br; ! if( $match{$child} ) { ! push @{$match{$parent}}, @{$match{$child}}; ! } else { ! push @branches, $br; ! } ! } ! if( $self->verbose > 1 ) { ! for my $k ( sort { $a <=> $b } keys %match ) { ! warn "$k -> ",join(",",@{$match{$k}}), "\n"; ! } ! } ! } push @trees, $tree; } ! # last; } $okay++; ! } elsif( /^\s*\d+\.\.\d+/ ) { ! push @branches, map { [split(/\.\./,$_)] } split; ! } } ! return \@trees,\%match; } sub _parse_NSsitesBatch { my $self = shift; ! my (%data,$idlookup); my ($okay,$done) =(0,0); while( defined($_ = $self->_readline) ) { *************** *** 827,831 **** $data{'-kappa'} = $1; } elsif( /^TREE/ ) { ! $data{'-trees'} = [$self->_parse_Forestry]; if( defined $data{'-trees'} && scalar @{$data{'-trees'}} ) { --- 892,897 ---- $data{'-kappa'} = $1; } elsif( /^TREE/ ) { ! $self->_pushback($_); ! ($data{'-trees'},$idlookup) = $self->_parse_Forestry; if( defined $data{'-trees'} && scalar @{$data{'-trees'}} ) { *************** *** 847,852 **** } elsif( /for each branch/ ) { my %branch_dnds = $self->_parse_branch_dnds; # These need to be added to the Node/branches ! $self->_pushback($_); } } elsif( /^Parameters in beta:/ ) { --- 913,953 ---- } elsif( /for each branch/ ) { my %branch_dnds = $self->_parse_branch_dnds; + if( ! defined $data{'-trees'} ) { + warn("No trees have been loaded, can't do anything\n"); + next; + } + my ($tree) = @{$data{'-trees'}}; + if( ! $tree || ! ref($tree) || + ! $tree->isa('Bio::Tree::Tree') ) { + warn("no tree object already stored!\n"); + next; + } # These need to be added to the Node/branches ! while( my ($k,$v) = each %branch_dnds) { ! # we can probably do better by caching at some point ! my @nodes; ! for my $id ( split(/\.\./,$k ) ) { ! my @nodes_L = map { $tree->find_node(-id => $_) } ! @{$idlookup->{$id}}; ! while( @nodes_L > 1 ) { ! my $lca = $tree->get_lca ! (-nodes => [shift @nodes_L, ! shift @nodes_L]); ! push @nodes_L, $lca; ! } ! my $n = shift @nodes_L; ! if( ! $n ) { ! warn("no node for $n\n"); ! } ! unless( $n->is_Leaf && $n->id) { ! $n->id($id); ! } ! push @nodes, $n; ! } ! my ($parent,$child) = @nodes; ! while ( my ($kk,$vv) = each %$v ) { ! $child->add_tag_value($kk,$vv); ! } ! } } } elsif( /^Parameters in beta:/ ) { *************** *** 908,920 **** my ($okay) = (0); my %branch_dnds; while(defined($_ = $self->_readline ) ) { next if( /^\s+$/); next unless ( $okay || /^\s+branch\s+t/); ! if( /^\s+branch\s+t/ ) { $okay = 1; ! } elsif( /^\s*(\d+)\.\.(\d+)/ ) { ! my ($branch,$t,$S,$N,$dNdS,$dN,$dS,$S_dS,$N_dN) = split; ! $branch_dnds{$branch} = [$branch,$t,$S,$N,$dNdS,$dN, ! $dS,$S_dS,$N_dN]; } else { $self->_pushback($_); --- 1009,1029 ---- my ($okay) = (0); my %branch_dnds; + my @header; while(defined($_ = $self->_readline ) ) { next if( /^\s+$/); next unless ( $okay || /^\s+branch\s+t/); ! if( /^\s+branch\s+(.+)/ ) { ! s/^\s+//; ! @header = split(/\s+/,$_); $okay = 1; ! } elsif( /^\s*(\d+\.\.\d+)/ ) { ! my $branch = $1; ! s/^\s+//; ! my $i =0; ! # fancyness just maps the header names like 't' or 'dN' ! # into the hash so we get at the end of the day ! # 't' => 0.067 ! # 'dN'=> 0.001 ! $branch_dnds{$branch} = { map { $header[$i++] => $_ } split}; } else { $self->_pushback($_); From Keller at writeme.com Thu Mar 3 04:33:49 2005 From: Keller at writeme.com (Eremenko Olga) Date: Thu Mar 3 08:25:15 2005 Subject: [Bioperl-guts-l] Re[9]: talk thread about her tablets Message-ID: <684201c51ff5$0be9cb80$6873edd3@webmail.co.yu> arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas From bugzilla-daemon at portal.open-bio.org Thu Mar 3 14:05:41 2005 From: bugzilla-daemon at portal.open-bio.org (bugzilla-daemon@portal.open-bio.org) Date: Thu Mar 3 14:28:30 2005 Subject: [Bioperl-guts-l] [Bug 1754] Bio::Location::Fuzzy.pm -> SwissProt FeatureTable locationvalue error (undef values!) Message-ID: <200503031905.j23J5f39014096@portal.open-bio.org> http://bugzilla.open-bio.org/show_bug.cgi?id=1754 ------- Additional Comments From florian.leitner@imp.univie.ac.at 2005-03-03 14:05 ------- Sorry, another line needs changes too which I forgot to mention: Add following line also: =begin code (lines 545/548-546/549) if(($FUZZYPOINTENCODE{$pattern} eq 'EXACT') || ($FUZZYPOINTENCODE{$pattern} eq 'UNCERTAIN')) { =end code bf,florian ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. From bugzilla-daemon at portal.open-bio.org Thu Mar 3 13:49:03 2005 From: bugzilla-daemon at portal.open-bio.org (bugzilla-daemon@portal.open-bio.org) Date: Thu Mar 3 14:28:32 2005 Subject: [Bioperl-guts-l] [Bug 1754] New: Bio::Location::Fuzzy.pm -> SwissProt FeatureTable locationvalue error (undef values!) Message-ID: <200503031849.j23In30t013812@portal.open-bio.org> http://bugzilla.open-bio.org/show_bug.cgi?id=1754 Summary: Bio::Location::Fuzzy.pm -> SwissProt FeatureTable locationvalue error (undef values!) Product: Bioperl Version: 1.5 branch Platform: PC OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: Bio::SeqIO AssignedTo: bioperl-guts-l@bioperl.org ReportedBy: florian.leitner@imp.univie.ac.at dear bp-team, in the above mentioned module, in the sub 'fuzzypointencode()' at line 541 the regex pattern is not found for "fuzzy" SwissProt Feature locations, which can contain a "?" in the location, looking like like in the SP ASCII file: FT 1 ?19 Something. The pattern for a '?' is not in the hash %FUZZYPOINTENCODE defined at line 99 in the same file. Actually you guys should add another %FUZZYCODES line with something like type 'SWISSPROT' or more universal 'FUZZY' or 'UNCERTAIN'. The SwissProt manual quotes on this: =begin quote Following the key name are the FROM and TO endpoint specifications. These fields designate (inclusively) the endpoints of the feature named in the key field. In general, these fields simply contain residue numbers which indicate positions in the sequence as listed. Note that these positions are always specified assuming a numbering of the listed sequence from 1 to n; this numbering is not necessarily the same as that used in the original reference(s). The following should be noted: -If the FROM and TO specifications are identical, the feature involves one single amino acid; -When a feature is known to extend beyond the position that is given in the feature table, the endpoint specification will be preceded by < for features which continue to the left end (N-terminal direction) or by > for features which continue to the right end (C- terminal direction); Unknown endpoints are denoted by ? . -Uncertain endpoints are denoted by a ? before the position, e.g. ?42. =end quote To sum up, this whole bug leads to the problem that SwissProt Features containing this UNCERTAIN location. Here's how we hacked youre code to make it work (all lines containing the string UNCERTAIN are new): =begin code (line 80-107/109) @LOCATIONCODESBSANE = (undef, 'EXACT', 'WITHIN', 'BETWEEN', 'UNCERTAIN', 'BEFORE', 'AFTER'); %FUZZYCODES = ( 'EXACT' => '..', # Position is 'exact # Exact position is unknown, but is within the range specified, ((1.2)..100) 'WITHIN' => '.', # 1^2 'BETWEEN' => '^', 'IN-BETWEEN' => '^', # <100 'UNCERTAIN' => '?', 'BEFORE' => '<', # >10 'AFTER' => '>'); # The following regular expressions map to fuzzy location types. Every # expression must match the complete encoded point string, and must # contain two groups identifying min and max. Empty matches are automatic. # converted to undef, except for 'EXACT', for which max is set to equal # min. %FUZZYPOINTENCODE = ( '\>(\d+)(.{0})' => 'AFTER', '\<(.{0})(\d+)' => 'BEFORE', '(\d+)' => 'EXACT', '\?(\d+)' => 'UNCERTAIN', '(\d+)(.{0})\>' => 'AFTER', '(.{0})(\d+)\<' => 'BEFORE', '(\d+)\.(\d+)' => 'WITHIN', '(\d+)\^(\d+)' => 'BETWEEN', ); =end code Second, for writing to a handle, in the sub to_FTstring() following lines need to be edited: =start code (lines 485-488/489) if( defined $vals{$point."_code"} && ($vals{$point."_code"} eq 'BEFORE' || $vals{$point."_code"} eq 'AFTER' || $vals{$point."_code"} eq 'UNCERTAIN' ) ) { =end code I hope this bug report will help you resolve this issue asap and otherwise want to congratulate you on your nice package. BTW, give my greetings to Hilmar Lapp, maybe he can still remember me: I started a little practical at Markus Jaritz at Novartis (SFI) at the time he left from Vienna for California (years ago, i know...). ;) br, florian ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. From bugzilla-daemon at portal.open-bio.org Thu Mar 3 14:40:48 2005 From: bugzilla-daemon at portal.open-bio.org (bugzilla-daemon@portal.open-bio.org) Date: Thu Mar 3 15:28:30 2005 Subject: [Bioperl-guts-l] [Bug 1754] Bio::Location::Fuzzy.pm -> SwissProt FeatureTable locationvalue error (undef values!) Message-ID: <200503031940.j23Jemds014594@portal.open-bio.org> http://bugzilla.open-bio.org/show_bug.cgi?id=1754 ------- Additional Comments From florian.leitner@imp.univie.ac.at 2005-03-03 14:40 ------- ok, sorry guys - got it kinda screwed - heres another change i have not mentioned in to_FTstring(): =start code if( defined $vals{"max_$point"} && ($vals{$point."_code"} ne 'UNCERTAIN') ) { $strs{$point} .= $vals{"max_$point"}; } =end code sry,br,flo ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. From jason at pub.open-bio.org Fri Mar 4 10:56:44 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Fri Mar 4 10:42:43 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts/searchio fastam9_to_table.PLS, 1.4, 1.5 Message-ID: <200503041556.j24FuiDT008836@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts/searchio In directory pub.open-bio.org:/tmp/cvs-serv8819 Modified Files: fastam9_to_table.PLS Log Message: fix header Index: fastam9_to_table.PLS =================================================================== RCS file: /home/repository/bioperl/bioperl-live/scripts/searchio/fastam9_to_table.PLS,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** fastam9_to_table.PLS 25 Jan 2005 01:18:43 -0000 1.4 --- fastam9_to_table.PLS 4 Mar 2005 15:56:41 -0000 1.5 *************** *** 1,3 **** ! #!/usr/bin/env perl -w =head1 NAME --- 1,4 ---- ! #!perl -w ! use strict; =head1 NAME *************** *** 52,56 **** =cut ! use strict; use Getopt::Long; my $hitsection = 0; --- 53,57 ---- =cut ! use Getopt::Long; my $hitsection = 0; From jason at pub.open-bio.org Fri Mar 4 11:00:51 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Fri Mar 4 10:46:49 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts/searchio hmmer_to_table.PLS, NONE, 1.1 Message-ID: <200503041600.j24G0pDT008875@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts/searchio In directory pub.open-bio.org:/tmp/cvs-serv8859 Added Files: hmmer_to_table.PLS Log Message: superfast HMMER to table parsing --- NEW FILE: hmmer_to_table.PLS --- #!perl -w use strict; =head1 NAME hmmer_to_table - turn HMMER output into tabular format =head1 SYNOPSIS hmmer_to_table [-e evaluefilter] [-b bitscorefilter] [--header] [-o outfile] inputfile1 inputfile2 ... =head1 DESCRIPTION Comand line options: -e/--evalue evalue -- filter by evalue -b/--bitscore bitscore -- filter by bitscore --header -- boolean flag to print column header -o/--out -- optional outputfile to write data, otherwise will write to STDOUT -h/--help -- show this documentation Not technically a SearchIO script as this doesn't use any Bioperl components but is a useful and fast. The output is tabular output. query sequence/domain (these are flip-flopped for hmmsearch / hmmpfam) query start query end domain/sequence name or PFAM accession hit start hit end score e-value domain/sequence name (these are flip-flopped for hmmsearch / hmmpfam) =head1 AUTHOR - Jason Stajich Jason Stajich jason_at_bioperl-dot-org =cut use Getopt::Long; my ($evalue,$bitscore,$header,$outfile); GetOptions( 'b|bitscore|bits:f' => \$bitscore, 'e|evalue:f' => \$evalue, 'header' => \$header, 'o|out|outfile:s' => \$outfile, 'h|help' => sub { exec('perldoc',$0); exit; } ); my $outfh; if( $outfile ) { open($outfh, ">$outfile") || die("$outfile: $!"); } else { $outfh = \*STDOUT; } my @fields = qw(QNAME QSTART QEND HACCESSION HSTART HEND SCORE EVALUE HNAME); if( $header ) { print $outfh join("\t", @fields), "\n"; } my %dat; while(<>) { if( s/^Query(\s+(sequence|HMM))?:\s+// ) { s/\s+$//; $dat{'Query'} = $_; } elsif( /^Parsed for domains:/ ) { my $ready = 0; while(<>) { if(/^Model|Sequence\s+Domain/ ) { $ready = 1; } elsif( $ready && /^\-\-/) { $ready = 2; } elsif( /^Alignments of/ ) { undef %dat; last; } elsif( $ready == 2 ) { if( my ($n,$domainnum,$domainct, @vals) = (m!^(\S+)\s+ # domain name (\d+)\/(\d+)\s+ # num/num (ie 1 of 2) (\d+)\s+(\d+).+? # sequence start and end (\d+)\s+(\d+)\s+ # hmm start and end \S+\s+ # [] (\S+)\s+ # score (\S+) # evalue \s*$!ox) ) { next if( defined $bitscore && $vals[4] < $bitscore ); next if (defined $evalue && $vals[5] > $evalue); print $outfh join("\t", $dat{'Query'}, $vals[0], $vals[1], $n, $vals[2],$vals[3], $vals[4],$vals[5], $n),"\n"; } } } } } From jason at pub.open-bio.org Fri Mar 4 11:01:06 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Fri Mar 4 10:46:59 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts/searchio TAG, NONE, 1.1 README, 1.1, 1.2 Message-ID: <200503041601.j24G16DT008900@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts/searchio In directory pub.open-bio.org:/tmp/cvs-serv8884 Modified Files: README Added Files: TAG Log Message: update related documentation Index: README =================================================================== RCS file: /home/repository/bioperl/bioperl-live/scripts/searchio/README,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** README 30 Jun 2004 15:16:04 -0000 1.1 --- README 4 Mar 2005 16:01:03 -0000 1.2 *************** *** 3,6 **** --- 3,7 ---- fastam9_to_table.PLS -- script which doesn't use Bio::SearchIO but provides fast parsing of FASTA -m9 output to an NCBI m9-like table. + hmmer_to_table.PLS -- script which doesn't use Bio::SearchIO but provides fast parsing of HMMER output into a tabular format. search2table.PLS -- Turn any Bio::SearchIO parseable report into NCBI m9-like tablular output --- NEW FILE: TAG --- These are scripts related to parsing Search Result output like HMMER, FASTA, BLAST. Not all of these scripts use Bioperl objects. From bugzilla-daemon at portal.open-bio.org Fri Mar 4 12:18:00 2005 From: bugzilla-daemon at portal.open-bio.org (bugzilla-daemon@portal.open-bio.org) Date: Fri Mar 4 12:28:29 2005 Subject: [Bioperl-guts-l] [Bug 1754] Bio::Location::Fuzzy.pm -> SwissProt FeatureTable locationvalue error (undef values!) Message-ID: <200503041718.j24HI00u026306@portal.open-bio.org> http://bugzilla.open-bio.org/show_bug.cgi?id=1754 ------- Additional Comments From florian.leitner@imp.univie.ac.at 2005-03-04 12:17 ------- hi guys, after having some troubles with this, here is the complete diff output. With this bioperl handles the new UNCERTAIN location, while still being able to do reversing (complement) even un uncertain locations, but not screwing it up on loctaions like 1..? to complement(?..1). To give you an overview this does: Input to_FTstring() start_pos_type() end_pos_type() location_type() ?..? ?..? UNCERTAIN UNCERTAIN UNCERTAIN ?..1 ?..1 UNCERTAIN EXACT UNCERTAIN 2..? 2..? EXACT UNCERTAIN UNCERTAIN ?41..?77 ?41..?77 UNCERTAIN UNCERTAIN EXACT 31..?102 31..?102 EXACT UNCERTAIN EXACT ?31..102 ?31..102 UNCERTAIN EXACT EXACT ?11..2 complement(2..?11) EXACT UNCERTAIN EXACT Here are the two files which need diffing: diff -r bioperl-1.5.0/Bio/Factory/FTLocationFactory.pm bioperl-1.5.0-swissmod/Bio/Factory/FTLocationFactory.pm 232a233,234 > $loctype = '?' if ( ($locstr =~ /\?/) && > ($locstr !~ /\?\d+/) ); 244a247,248 > $loctype = '?' if ( ($locstr =~ /\?/) && > ($locstr !~ /\?\d+/) ); 254c258,260 < if( $start_num > $end_num ) { --- > if( ($start_num > $end_num) && > ($loctype ne '?') > ) { diff -r bioperl-1.5.0/Bio/Location/Fuzzy.pm bioperl-1.5.0-swissmod/Bio/Location/Fuzzy.pm 80c80 < @LOCATIONCODESBSANE = (undef, 'EXACT', 'WITHIN', 'BETWEEN', --- > @LOCATIONCODESBSANE = (undef, 'EXACT', 'WITHIN', 'BETWEEN', 'UNCERTAIN', 88a89 > 'UNCERTAIN' => '?', 102a104 > '\?(\d*)' => 'UNCERTAIN', 177c179,180 < --- > } elsif( $value =~ /\?/ ) { > $value = 'UNCERTAIN'; 461a465 > $delimiter = $FUZZYCODES{'EXACT'} if ($self->location_type eq 'UNCERTAIN'); 465c469,470 < if( $vals{$point."_code"} ne 'EXACT' ) { --- > if( ($vals{$point."_code"} ne 'EXACT') && > ($vals{$point."_code"} ne 'UNCERTAIN') ) { 503c508,511 < } else { --- > } elsif ($vals{$point."_code"} eq 'UNCERTAIN') { > $strs{$point} = $FUZZYCODES{$vals{$point."_code"}}; > $strs{$point} .= $vals{$point} if defined $vals{$point}; > } else { 513c521,522 < $self->strand == -1 ) { --- > $self->strand == -1 && > $self->location_type() ne "UNCERTAIN") { 542,543c551,554 < my ($min,$max) = ($1,$2); < if($FUZZYPOINTENCODE{$pattern} eq 'EXACT') { --- > my ($min,$max) = ($1,$2) unless ($1 eq ''); > if( ($FUZZYPOINTENCODE{$pattern} eq 'EXACT') || > ($FUZZYPOINTENCODE{$pattern} eq 'UNCERTAIN') > ) { Thats it - happy coding, now its fine! ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. From bugzilla-daemon at portal.open-bio.org Fri Mar 4 13:27:48 2005 From: bugzilla-daemon at portal.open-bio.org (bugzilla-daemon@portal.open-bio.org) Date: Fri Mar 4 13:28:45 2005 Subject: [Bioperl-guts-l] [Bug 1754] Bio::Location::Fuzzy.pm -> SwissProt FeatureTable locationvalue error (undef values!) Message-ID: <200503041827.j24IRmu4027120@portal.open-bio.org> http://bugzilla.open-bio.org/show_bug.cgi?id=1754 ------- Additional Comments From florian.leitner@imp.univie.ac.at 2005-03-04 13:27 ------- update again, as the swissprot features like <1..? were not treated correctly and would collide with the pattern ^\<(.{0})(\d+)$ and my new unless statment "$1 eq ''". Now no more warnings are produced during the complete import (yes, finally I did do a complete import before posting more blabla... ;) hope youre not annoyed...). Now someone needs to test my code for compatibility with GenBank etc. for we use our own parser there. diff -r bioperl-1.5.0/Bio/Factory/FTLocationFactory.pm bioperl-1.5.0-swissmod/Bio/Factory/FTLocationFactory.pm 232a233,234 > $loctype = '?' if ( ($locstr =~ /\?/) && > ($locstr !~ /\?\d+/) ); 244a247,248 > $loctype = '?' if ( ($locstr =~ /\?/) && > ($locstr !~ /\?\d+/) ); 254c258,260 < if( $start_num > $end_num ) { --- > if( ($start_num > $end_num) && > ($loctype ne '?') > ) { diff -r bioperl-1.5.0/Bio/Location/Fuzzy.pm bioperl-1.5.0-swissmod/Bio/Location/Fuzzy.pm 80c80 < @LOCATIONCODESBSANE = (undef, 'EXACT', 'WITHIN', 'BETWEEN', --- > @LOCATIONCODESBSANE = (undef, 'EXACT', 'WITHIN', 'BETWEEN', 'UNCERTAIN', 88a89 > 'UNCERTAIN' => '?', 102a104 > '\?(\d*)' => 'UNCERTAIN', 177c179,180 < --- > } elsif( $value =~ /\?/ ) { > $value = 'UNCERTAIN'; 461a465 > $delimiter = $FUZZYCODES{'EXACT'} if ($self->location_type eq 'UNCERTAIN'); 465c469,470 < if( $vals{$point."_code"} ne 'EXACT' ) { --- > if( ($vals{$point."_code"} ne 'EXACT') && > ($vals{$point."_code"} ne 'UNCERTAIN') ) { 503c508,511 < } else { --- > } elsif ($vals{$point."_code"} eq 'UNCERTAIN') { > $strs{$point} = $FUZZYCODES{$vals{$point."_code"}}; > $strs{$point} .= $vals{$point} if defined $vals{$point}; > } else { 513c521,522 < $self->strand == -1 ) { --- > $self->strand == -1 && > $self->location_type() ne "UNCERTAIN") { 542,543c551,554 < my ($min,$max) = ($1,$2); < if($FUZZYPOINTENCODE{$pattern} eq 'EXACT') { --- > my ($min,$max) = ($1,$2) unless (($1 eq '') && (!defined $2)); > if( ($FUZZYPOINTENCODE{$pattern} eq 'EXACT') || > ($FUZZYPOINTENCODE{$pattern} eq 'UNCERTAIN') > ) { 546,547c557,558 < $max = undef if(length($max) == 0); < $min = undef if(length($min) == 0); --- > $max = undef if((defined $max) && (length($max) == 0)); > $min = undef if((defined $min) && (length($min) == 0)); ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. From lstein at pub.open-bio.org Fri Mar 4 13:53:47 2005 From: lstein at pub.open-bio.org (Lincoln Stein) Date: Fri Mar 4 13:39:41 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/DB/GFF/Adaptor memory.pm, 1.28, 1.29 Message-ID: <200503041853.j24IrlDT009477@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/DB/GFF/Adaptor In directory pub.open-bio.org:/tmp/cvs-serv9468/Bio/DB/GFF/Adaptor Modified Files: memory.pm Log Message: fixed a problem involving memory.pm not being able to cope with empty feature classes Index: memory.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/DB/GFF/Adaptor/memory.pm,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** memory.pm 11 Sep 2004 02:59:26 -0000 1.28 --- memory.pm 4 Mar 2005 18:53:45 -0000 1.29 *************** *** 179,186 **** my $feature_hash = shift; $feature_hash->{strand} = '' if $feature_hash->{strand} && $feature_hash->{strand} eq '.'; ! $feature_hash->{phase} = '' if $feature_hash->{phase} && $feature_hash->{phase} eq '.'; # sort by group please push @{$self->{tmp}{$feature_hash->{gclass},$feature_hash->{gname}}},$feature_hash; - # push @{$self->{data}},$feature_hash; } --- 179,186 ---- my $feature_hash = shift; $feature_hash->{strand} = '' if $feature_hash->{strand} && $feature_hash->{strand} eq '.'; ! $feature_hash->{phase} = '' if $feature_hash->{phase} && $feature_hash->{phase} eq '.'; ! $feature_hash->{gclass} = 'Sequence' if length $feature_hash->{gclass} == 0; # sort by group please push @{$self->{tmp}{$feature_hash->{gclass},$feature_hash->{gname}}},$feature_hash; } From bosborne at pub.open-bio.org Fri Mar 4 15:53:09 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Fri Mar 4 15:39:07 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts/Bio-DB-GFF load_ucsc.pl, 1.2, NONE Message-ID: <200503042053.j24Kr9DT009864@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF In directory pub.open-bio.org:/tmp/cvs-serv9855 Removed Files: load_ucsc.pl Log Message: This script is in examples/ --- load_ucsc.pl DELETED --- From bosborne at pub.open-bio.org Fri Mar 4 16:01:40 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Fri Mar 4 15:47:33 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts/DB bioflat_index.PLS,1.2,1.3 Message-ID: <200503042101.j24L1eDT009918@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts/DB In directory pub.open-bio.org:/tmp/cvs-serv9909 Modified Files: bioflat_index.PLS Log Message: Add POD Index: bioflat_index.PLS =================================================================== RCS file: /home/repository/bioperl/bioperl-live/scripts/DB/bioflat_index.PLS,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** bioflat_index.PLS 16 Jun 2004 15:06:15 -0000 1.2 --- bioflat_index.PLS 4 Mar 2005 21:01:38 -0000 1.3 *************** *** 2,20 **** #$Id$ ! use strict; ! use Bio::Root::Root; ! use Bio::Root::IO; ! use Bio::DB::Flat; ! use Getopt::Long; ! use File::Path qw(mkpath rmtree); ! use constant USAGE => < file1 file2 file3... ! Create or update a biological sequence database indexed with the ! Bio::DB::Flat indexing scheme. The arguments are a list of flat files ! containing the sequence information to be indexed. Options: --create Create or reinitialize the index. If not specified, the index must already exist. --- 2,21 ---- #$Id$ ! =head1 NAME ! bioflat_index.PLS - index sequence files using Bio::DB::Flat ! =head1 DESCRIPTION ! ! Create or update a biological sequence database indexed with the ! Bio::DB::Flat indexing scheme. The arguments are a list of flat files ! containing the sequence information to be indexed. ! ! =head1 USAGE ! ! bioflat_index.PLS file1 file2 file3... Options: + --create Create or reinitialize the index. If not specified, the index must already exist. *************** *** 41,54 **** OBDA_INDEX type of index to create ! END ! ; my ($CREATE,$FORMAT,$LOCATION,$DBNAME,$INDEXTYPE); GetOptions( 'create' => \$CREATE, ! 'format:s' => \$FORMAT, ! 'location:s' => \$LOCATION, ! 'dbname:s' => \$DBNAME, ! 'indextype:s' => \$INDEXTYPE ) or die USAGE; $FORMAT = $ENV{OBDA_FORMAT} unless defined $FORMAT; --- 42,61 ---- OBDA_INDEX type of index to create ! =cut ! ! use strict; ! use Bio::Root::Root; ! use Bio::Root::IO; ! use Bio::DB::Flat; ! use Getopt::Long; ! use File::Path qw(mkpath rmtree); my ($CREATE,$FORMAT,$LOCATION,$DBNAME,$INDEXTYPE); GetOptions( 'create' => \$CREATE, ! 'format:s' => \$FORMAT, ! 'location:s' => \$LOCATION, ! 'dbname:s' => \$DBNAME, ! 'indextype:s' => \$INDEXTYPE ) or die USAGE; $FORMAT = $ENV{OBDA_FORMAT} unless defined $FORMAT; *************** *** 62,65 **** --- 69,73 ---- # confirm that database directory is there defined $LOCATION or $root->throw("please provide a base directory with the --location option"); + -d $LOCATION or $root->throw("$LOCATION is not a valid directory; use --create to create a new index"); *************** *** 88,101 **** # open for writing/updating my $db = Bio::DB::Flat->new(-directory => $LOCATION, ! -dbname => $DBNAME, ! $INDEXTYPE ? ( ! -index => $INDEXTYPE ! ) ! : (), ! -write_flag => 1, ! -format => $FORMAT) or $root->throw("can't create Bio::DB::Flat object"); my $entries = $db->build_index(@ARGV); print STDERR "(Re)indexed $entries entries.\n "; 1; - --- 96,110 ---- # open for writing/updating my $db = Bio::DB::Flat->new(-directory => $LOCATION, ! -dbname => $DBNAME, ! $INDEXTYPE ? ( ! -index => $INDEXTYPE ! ) ! : (), ! -write_flag => 1, ! -format => $FORMAT) or ! $root->throw("can't create Bio::DB::Flat object"); ! my $entries = $db->build_index(@ARGV); print STDERR "(Re)indexed $entries entries.\n "; 1; From bosborne at pub.open-bio.org Fri Mar 4 16:08:44 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Fri Mar 4 15:54:36 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts install_bioperl_scripts.pl, 1.5, 1.6 Message-ID: <200503042108.j24L8iDT009957@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts In directory pub.open-bio.org:/tmp/cvs-serv9948 Modified Files: install_bioperl_scripts.pl Log Message: Add POD Index: install_bioperl_scripts.pl =================================================================== RCS file: /home/repository/bioperl/bioperl-live/scripts/install_bioperl_scripts.pl,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** install_bioperl_scripts.pl 11 Aug 2003 23:58:33 -0000 1.5 --- install_bioperl_scripts.pl 4 Mar 2005 21:08:41 -0000 1.6 *************** *** 1,4 **** --- 1,14 ---- #!/usr/bin/perl -w + =head1 NAME + + install_bioperl_scripts.pl - install scripts in scripts/ at install time + + =head1 DESCRIPTION + + Run automatically on 'make' from directory above scripts/. + + =cut + use strict; use Config; *************** *** 21,25 **** prompt_mode = 'a' (all) | 'i' (interactive) | 'n' (none) ! Note: this script must be run from the parent directory of /scripts "; --- 31,35 ---- prompt_mode = 'a' (all) | 'i' (interactive) | 'n' (none) ! Note: this script must be run from the parent directory of /scripts. "; *************** *** 27,31 **** die $usage unless $install_dir; - $prompt_mode = 'all' if $prompt_mode =~ /^a/i; $prompt_mode = 'none' if $prompt_mode =~ /^n/i; --- 37,40 ---- *************** *** 65,86 **** while (my $script = readdir(D)) { next unless $script =~ /\.PLS$/; ! my $in = IO::File->new("$dir/$script") or die "Can't open $dir/$script: $!"; $script =~ s/\.PLS$/\.pl/; # change from .PLS to .pl $script =~ s/^/bp_/ unless $script =~ /^bp/; # add the "bp" prefix print "\tInstalling $script....\n"; unlink "$dest/$script" if -e "$dest/$script"; ! my $out = IO::File->new(">$dest/$script") or die "Can't open $dest/$script: $!"; my $doneit; while (<$in>) { next if $doneit; if (s/^\#\!\S+/$bangline/) { ! $doneit++; } } continue { ! print $out $_; } close $in; close $out; ! chmod MODE,"$dest/$script" or die "Can't change mode of $script to ",MODE,": $!"; } closedir D; --- 74,98 ---- while (my $script = readdir(D)) { next unless $script =~ /\.PLS$/; ! my $in = IO::File->new("$dir/$script") ! or die "Can't open $dir/$script: $!"; $script =~ s/\.PLS$/\.pl/; # change from .PLS to .pl $script =~ s/^/bp_/ unless $script =~ /^bp/; # add the "bp" prefix print "\tInstalling $script....\n"; unlink "$dest/$script" if -e "$dest/$script"; ! my $out = IO::File->new(">$dest/$script") ! or die "Can't open $dest/$script: $!"; my $doneit; while (<$in>) { next if $doneit; if (s/^\#\!\S+/$bangline/) { ! $doneit++; } } continue { ! print $out $_; } close $in; close $out; ! chmod MODE,"$dest/$script" ! or die "Can't change mode of $script to ",MODE,": $!"; } closedir D; *************** *** 90,92 **** __END__ - --- 102,103 ---- From bosborne at pub.open-bio.org Fri Mar 4 18:44:31 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Fri Mar 4 18:30:57 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Index Blast.pm,1.15,1.16 Message-ID: <200503042344.j24NiVDT010422@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Index In directory pub.open-bio.org:/tmp/cvs-serv10413/Bio/Index Modified Files: Blast.pm Log Message: Somewhere along the line I broke t/BlastIndex.t, now it passes Index: Blast.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Index/Blast.pm,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** Blast.pm 28 Feb 2005 12:54:43 -0000 1.15 --- Blast.pm 4 Mar 2005 23:44:29 -0000 1.16 *************** *** 20,49 **** use strict; use Bio::Index::Blast; ! my ($indexfile,$file1, $file2); my $index = new Bio::Index::Blast(-filename => $indexfile, ! -write_flag => 1); ! $index->make_index($file1, $file2); ! my $id; ! my $data = $index->get_stream($id); ! my $blast_report = $index->fetch_report($id); print "query is ", $blast_report->query, "\n"; while( my $result = $blast_report->next_result ) { ! print $result->algorithm, "\n"; ! while( my $hsp = $result->next_hit ) { ! print "\t name ", $hsp->name, ! } ! print "\n"; } =head1 DESCRIPTION This object allows one to build an index on a blast file (or files) and provide quick access to the blast report for that accession. Note: for best results 'use strict'. ! The default key is the word after the ">" character (/^\s*(\S+)/). ! You can also set or customize the unique key used to retrieve by writing your own function and calling the id_parser() method. For example: --- 20,50 ---- use strict; use Bio::Index::Blast; ! my ($indexfile,$file1,$file2,$query); my $index = new Bio::Index::Blast(-filename => $indexfile, ! -write_flag => 1); ! $index->make_index($file1,$file2); ! my $data = $index->get_stream($query); ! my $blast_report = $index->fetch_report($query); print "query is ", $blast_report->query, "\n"; while( my $result = $blast_report->next_result ) { ! print $result->algorithm, "\n"; ! while( my $hsp = $result->next_hit ) { ! print "\t name ", $hsp->name, ! } ! print "\n"; } =head1 DESCRIPTION + =head1 DESCRIPTION + This object allows one to build an index on a blast file (or files) and provide quick access to the blast report for that accession. Note: for best results 'use strict'. ! The default key is the first word in a line (/^\s*(\S+)/). ! You can also set or customize the unique key used to retrieve by writing your own function and calling the id_parser() method. For example: *************** *** 56,60 **** sub get_id { my $line = shift; ! $line =~ /^\s+([A-Z]+)/i; $1; } --- 57,61 ---- sub get_id { my $line = shift; ! $line =~ /^>\s+([A-Z]+)/i; $1; } *************** *** 93,111 **** =cut # Let the code begin... package Bio::Index::Blast; ! use vars qw(@ISA ); use strict; use Bio::Root::Root; use Bio::Index::Abstract; ! use Bio::SearchIO; use IO::String; @ISA = qw(Bio::Index::Abstract Bio::Root::Root ); sub _version { ! return 0.1; } --- 94,118 ---- =cut + # Let the code begin... + package Bio::Index::Blast; ! use vars qw(@ISA $VERSION); use strict; use Bio::Root::Root; use Bio::Index::Abstract; ! use Bio::Tools::BPlite; use IO::String; @ISA = qw(Bio::Index::Abstract Bio::Root::Root ); + BEGIN { + $VERSION = 0.1; + } + sub _version { ! return $VERSION; } *************** *** 117,120 **** --- 124,128 ---- -dbm_package => 'DB_File', -verbose => 0); + Function: Returns a new index object. If filename is specified, then open_dbm() is immediately called. *************** *** 148,154 **** Title : fetch_report Usage : my $blastreport = $idx->fetch_report($id); ! Function: Returns a Bio::Search::Result::ResultI report object ! for a specific blast report ! Returns : Bio::Search::Result::ResultI Args : valid id --- 156,162 ---- Title : fetch_report Usage : my $blastreport = $idx->fetch_report($id); ! Function: Returns a Bio::SearchIO report object ! for a specific blast report ! Returns : Bio::SearchIO Args : valid id *************** *** 156,168 **** sub fetch_report{ ! my ($self,$id) = @_; ! my $fh = $self->get_stream($id); ! my $report = new Bio::SearchIO(-noclose => 1, ! -format => 'blast', ! -fh => $fh); ! return $report->next_result; } ! # shamelessly stolen from Bio::Index::Fasta =head2 id_parser --- 164,177 ---- sub fetch_report{ ! my ($self,$id) = @_; ! my $fh = $self->get_stream($id); ! my $report = new Bio::SearchIO(-noclose => 1, ! -format => 'blast', ! -fh => $fh); ! return $report->next_result; } ! ! # shamlessly stolen from Bio::Index::Fasta =head2 id_parser *************** *** 175,181 **** parser for different flavours of blast dbs. Returns \&default_id_parser (see below) if not ! set. If you supply your own id_parser ! subroutine, then it should expect a fasta ! description line. An entry will be added to the index for each string in the list returned. Example : $index->id_parser( \&my_id_parser ) --- 184,188 ---- parser for different flavours of blast dbs. Returns \&default_id_parser (see below) if not ! set. An entry will be added to the index for each string in the list returned. Example : $index->id_parser( \&my_id_parser ) *************** *** 186,195 **** sub id_parser { ! my( $self, $code ) = @_; ! if ($code) { ! $self->{'_id_parser'} = $code; ! } ! return $self->{'_id_parser'} || \&default_id_parser; } --- 193,202 ---- sub id_parser { ! my( $self, $code ) = @_; ! if ($code) { ! $self->{'_id_parser'} = $code; ! } ! return $self->{'_id_parser'} || \&default_id_parser; } *************** *** 199,213 **** Title : default_id_parser ! Usage : $id = default_id_parser( $header ) Function: The default Blast Query ID parser for Bio::Index::Blast.pm ! Returns $1 from applying the regexp /^>\s*(\S+)/ ! to $header. Returns : ID string ! Args : a header line string =cut sub default_id_parser { ! if ($_[0] =~ /^>\s*(\S+)/) { return $1; } else { --- 206,220 ---- Title : default_id_parser ! Usage : $id = default_id_parser( $line ) Function: The default Blast Query ID parser for Bio::Index::Blast.pm ! Returns $1 from applying the regexp /^\s*(\S+)/ ! to $line. Returns : ID string ! Args : a line string =cut sub default_id_parser { ! if ($_[0] =~ /^\s*(\S+)/) { return $1; } else { *************** *** 239,244 **** ) = @_; ! my( $begin, # Offset from start of file of the start ! # of the last found record. ); --- 246,251 ---- ) = @_; ! my( $begin, # Offset from start of file of the start ! # of the last found record. ); *************** *** 261,269 **** # since we are at the beginning of a new report ! # store this begin location for the next index $indexpoint = $lastline; @data = (); } ! push @data, $_ if defined; $lastline = tell(BLAST); } --- 268,276 ---- # since we are at the beginning of a new report ! # store this begin location for the next index $indexpoint = $lastline; @data = (); } ! push @data, $_; $lastline = tell(BLAST); } *************** *** 284,292 **** my $datal = new IO::String($data); ! my $report = new Bio::SearchIO(-noclose => 1, ! -format => 'blast', ! -fh => $datal); ! my $result = $report->next_result; ! my $query = $result->query_name; foreach my $id (&$id_parser($query)) { print "id is $id, begin is $begin\n" if( $self->verbose > 0); --- 291,298 ---- my $datal = new IO::String($data); ! my $report = new Bio::Tools::BPlite(-fh => $datal, ! -noclose => 1); ! ! my $query = $report->query; foreach my $id (&$id_parser($query)) { print "id is $id, begin is $begin\n" if( $self->verbose > 0); *************** *** 297,301 **** =head2 Bio::Index::Abstract methods - =head2 filename --- 303,306 ---- *************** *** 476,479 **** --- 481,489 ---- =cut + + + 1; + + 1; From jason at pub.open-bio.org Sun Mar 6 10:05:14 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Sun Mar 6 09:53:21 2005 Subject: [Bioperl-guts-l] bioperl-live/doc/howto/sgml PopGen.xml,1.2,1.3 Message-ID: <200503061505.j26F5EDT024725@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/doc/howto/sgml In directory pub.open-bio.org:/tmp/cvs-serv24692/sgml Modified Files: PopGen.xml Log Message: updates Index: PopGen.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/PopGen.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** PopGen.xml 23 Feb 2005 04:56:30 -0000 1.2 --- PopGen.xml 6 Mar 2005 15:05:12 -0000 1.3 *************** *** 37,41 **** Updated method docs ! --- 37,46 ---- Updated method docs ! ! 0.3 ! 2005-03-05 ! JES ! Expanded to cover coalescent and others ! *************** *** 45,51 **** License. ! $Id$ --- 50,57 ---- License. ! *************** *** 64,68 **** To see results of using these tools see Stajich and Hahn (2005) ! tajima_D, Hahn MW et al (2004) using composite_LD, and Rockman MV et al (2003) using Fst. --- 70,74 ---- To see results of using these tools see Stajich and Hahn (2005) ! using tajima_D, Hahn MW et al (2004) using composite_LD, and Rockman MV et al (2003) using Fst. *************** *** 89,92 **** --- 95,99 ---- + Bio::PopGen::Population is a container for a set of Bio::PopGen::Individual in order to represent individuals from a *************** *** 94,105 **** genotype objects which are an allele set associated with a unique marker name. Methods associated with the Population object can ! calculate the summary statistics such as pi, theta, heterozygocity ! by processing each Individual in the set. A Marker is the name given to a polymorphic region of the genome. - In some instances a Marker can be a unique collection of primer - pair(s). In other cases it be a set of restriction enzymes. Markers are represented by a Bio::PopGen::Marker object which can --- 101,113 ---- genotype objects which are an allele set associated with a unique marker name. Methods associated with the Population object can ! calculate the summary statistics such ! as pi, theta, ! heterozygocity by processing each Individual ! in the set. + A Marker is the name given to a polymorphic region of the genome. Markers are represented by a Bio::PopGen::Marker object which can *************** *** 162,168 **** There is no restriction on the names of markers nor is there any attempted validation that a genotype's individual_id is equal to ! the id of Individual is has been associated with it. It is ! merely a convience as it is ! --- 170,174 ---- There is no restriction on the names of markers nor is there any attempted validation that a genotype's individual_id is equal to ! the id of Individual is has been associated with it. *************** *** 191,196 **** ! Using these basic operations one can create a population ! individuals. Bio::PopGen::Marker objects are intended to provide summary of information about the markers stored for all the individuals. --- 197,203 ---- ! Using these basic operations one can create ! a Population of individuals. ! Bio::PopGen::Marker objects are intended to provide summary of information about the markers stored for all the individuals. *************** *** 207,215 **** missing '?'. The 'N' allele is also considered a blank allele. The regexp used to test if an allele is blank is stored in the ! Bio::PopGen::Genotype as the package variable $BlankAlleles. The following code resets the blank allele pattern to additionally match '.' as a blank allele. This code should go ! BEFORE any code that calls the get_Alleles method in ! Bio::PopGen::Genotype; --- 214,223 ---- missing '?'. The 'N' allele is also considered a blank allele. The regexp used to test if an allele is blank is stored in the ! Bio::PopGen::Genotype as the package ! variable $BlankAlleles. The following code resets the blank allele pattern to additionally match '.' as a blank allele. This code should go ! BEFORE any code that calls the get_Alleles method in ! Bio::PopGen::Genotype. *************** *** 246,260 **** To read in this CSV we use the Bio::Popgen::IO object and specify the ! csv format. We can ! call next_individual repeated ! times to get back a list of the individuals (one is returned ! after each time the iterator is called). Additionally ! the next_population is a ! convience method which will read in all the individuals at once ! and create a new Bio::PopGen::Population object containing all of ! thse individuals. The CSV format assumes that ',' is the ! delimiter between columns while '\s+' is the delimiter between ! alleles. One can override these settings by providing the ! -field_delimiter and -allele_delimited argument to Bio::Popgen::IO when instantiating. Additionally a flag called -no_header can be supplied which specifies there is no header --- 254,267 ---- To read in this CSV we use the Bio::Popgen::IO object and specify the ! csv format. We can call next_individual ! repeated times to get back a list of the individuals (one is ! returned after each time the iterator is called). Additionally ! the next_population is a convience method ! which will read in all the individuals at once and create a ! new Bio::PopGen::Population object ! containing all of thse individuals. The CSV format assumes that ! ',' is the delimiter between columns while '\s+' is the delimiter ! between alleles. One can override these settings by providing ! the -field_delimiter and -allele_delimited argument to Bio::Popgen::IO when instantiating. Additionally a flag called -no_header can be supplied which specifies there is no header *************** *** 569,573 **** ! Disentangling the effects of demography and selection in human history --- 576,580 ---- ! Disentangling the effects of demography and selection in human history *************** *** 584,591 **** Mol Biol Evol 2005 22(1):63-73 ! ! Population genetic and phylogenetic evidence for positive selection on regulatory mutations at the factor VII locus in humans --- 591,598 ---- Mol Biol Evol 2005 22(1):63-73 ! ! Population genetic and phylogenetic evidence for positive selection on regulatory mutations at the factor VII locus in humans *************** *** 611,621 **** Genetics ! 2004 167(2): ! 867-77 ! ! Positive selection on a human-specific transcription factor binding site regulating IL4 expression. Matthew --- 618,627 ---- Genetics ! 2004 167(2):867-77 ! ! Positive selection on a human-specific transcription factor binding site regulating IL4 expression Matthew *************** *** 640,645 **** Current Biology ! 2003 13(23) ! 2118-23 --- 646,650 ---- Current Biology ! 2003 13(23):2118-23 From jason at pub.open-bio.org Sun Mar 6 10:05:14 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Sun Mar 6 09:54:33 2005 Subject: [Bioperl-guts-l] bioperl-live/doc/howto/html PopGen.html,NONE,1.1 Message-ID: <200503061505.j26F5EDT024724@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/doc/howto/html In directory pub.open-bio.org:/tmp/cvs-serv24692/html Added Files: PopGen.html Log Message: updates --- NEW FILE: PopGen.html --- Population Genetics in BioPerl HOWTO

Population Genetics in BioPerl HOWTO

Jason Stajich

Dept Molecular Genetics and Microbiology, Duke University

This document is copyright Jason Stajich, 2004. It can be copied and distributed under the terms of the Perl Artistic License.

2005-03-1

Revision History
Revision 0.12004-06-28JES
First draft
Revision 0.22004-02-22JES
Updated method docs
Revision 0.32005-03-05JES
Expanded to cover coalescent and others

Introduction

We have aimed to build a set of modules that can be used as part of an automated process for testing population genetics and molecular evolutionary hypotheses. These typically center around sequence based data and we have built a set of routines which will enable processing of large datasets in a pipeline fashion.

To see results of using these tools see Stajich and Hahn (2005) using tajima_D, Hahn MW et al (2004) using composite_LD, and Rockman MV et al (2003) using Fst.

This document will be split up into sections which describe the data objects for representing populations, tests you can perform using these objects, a coalescent implementation, and objects for performing sequence distance based calculations. A full treatment of the Bioperl interface to the PAML suite (Z.Yang, 1997) is covered in the PAML HOWTO and objects and data pertinent to phylogenetic data manipulation are covered in the Trees HOWTO.

The Bio::PopGen Objects

In Bioperl we have created a few objects to describe population genetic data. These are all located in the Bio::PopGen namespace, so they can be browsed by looking at the Bio/PopGen directory.

Bio::PopGen::Population is a container for a set of Bio::PopGen::Individual in order to represent individuals from a population. Each Individual has a set of Bio::PopGen::Genotype genotype objects which are an allele set associated with a unique marker name. Methods associated with the Population object can calculate the summary statistics such as pi, theta, heterozygocity by processing each Individual in the set.

A Marker is the name given to a polymorphic region of the genome. Markers are represented by a Bio::PopGen::Marker object which can contain information such as allele frequencies in a population. Derived subclasses of the main Bio::PopGen::Marker are used to store specialized information about markers where supported by data formats. This is done particularly in the Bio::Pedigree objects which are a set of modules derived from Bio::PopGen and intended to handle the case of interrelated individuals.

Building Populations

Although a typical user will want to obtain data for analysis from files or directly from databases we will describe briefly how to create Individuals with Genotypes and Populations of Individuals directly in the code to illustrate the parameters used and access to the data stored in the objects.

A genotype is a triple of a marker name (string), an individual id (string or int), and set of alleles (array of string). The individual_id field is optional as it is explicitly set when a genotype is added to and individual. We can instantiate a Genotype object by using the following code.

use Bio::PopGen::Genotype;
my $genotype = Bio::PopGen::Genotype->new(-marker_name   => 'D7S123',
                                          -individual_id => '1001',
                                          -alleles       => ['104','107'], 
                                          );
  

To get the alleles back out from a Genotype object the

get_Alleles

method can be used. To replace alleles one must call the

reset_Alleles

and then

add_Allele

with a list of alleles to add for the genotype.

This genotype object can be added to an individual object with the following code which also builds an individual with an id of '1001'.

use Bio::PopGen::Individual;
my $ind = Bio::PopGen::Individual->new(-unique_id  => '1001',
                                       -genotypes  => [$genotype]
                                       );
  

There is no restriction on the names of markers nor is there any attempted validation that a genotype's individual_id is equal to the id of Individual is has been associated with it.

Additional genotypes can be added to an individual with the add_Genotype method as the following code illustrates.

$ind->add_Genotype(Bio::PopGen::Genotype->new(
                     -alleles       => ['102', '123'],
                     -marker_name   => 'D17S111'
                                             )
                  );
   

A population is a collecion of individuals and can be instantiated with all the individuals at once or individuals can be added to the object after it has been created.

use Bio::PopGen::Population;
my $pop = Bio::PopGen::Population->new(-name        => 'pop name',
                                       -description => 'description',
                                       -individuals => [$ind] );
# add another individual later on
$pop->add_Inidividual($ind2);
   

Using these basic operations one can create a Population of individuals. Bio::PopGen::Marker objects are intended to provide summary of information about the markers stored for all the individuals.

Typically it is expected that all individuals will have a genotype associated for all the possible markers in the population. For cases where no genotype information is available for an individual empty or blank alleles can be stored. This is necessary for consistency when running some tests on the population but these blank alleles do not get counted when evaluating the number of alleles, etc. Blank alleles can be coded as a dash ('-'), as a blank or empty (' ', or ''), or as missing '?'. The 'N' allele is also considered a blank allele. The regexp used to test if an allele is blank is stored in the Bio::PopGen::Genotype as the package variable $BlankAlleles. The following code resets the blank allele pattern to additionally match '.' as a blank allele. This code should go BEFORE any code that calls the get_Alleles method in Bio::PopGen::Genotype.

     use Bio::PopGen::Genotype;
     $Bio::PopGen::Genotype::BlankAlleles = '[\s\-N\?\.]';
   

Bio::PopGen::Marker is a simple object to represent polymorphism regions of the genome.

Reading and Writing Population data with Bio::PopGen::IO

Typically one wants to get population data from a datafile.

To read data in CSV format

The CSV format is a comma delimited format where each row is for an individual. The first column gives the individual or sample id and the rest of the columns are the alleles for the individual for each marker. The names of the markers in these rows are listed in the header or which is the very first line of the file.

     SAMPLE,D17S1111,D7S123
     1001,102 123,104 107
     1002,105 123,104 111
   

To read in this CSV we use the Bio::Popgen::IO object and specify the csv format. We can call next_individual repeated times to get back a list of the individuals (one is returned after each time the iterator is called). Additionally the next_population is a convience method which will read in all the individuals at once and create a new Bio::PopGen::Population object containing all of thse individuals. The CSV format assumes that ',' is the delimiter between columns while '\s+' is the delimiter between alleles. One can override these settings by providing the -field_delimiter and -allele_delimited argument to Bio::Popgen::IO when instantiating. Additionally a flag called -no_header can be supplied which specifies there is no header line in the report and that the object should assign arbitrary marker names in the form 'Marker1', 'Marker2' ... etc.

Pretty Base format

Phase and hapmap format

Allele data from Alignments using Bio::AlignIO and Bio::PopGen::Utilities

Often one doesn't already have data in SNP format but want to determine the polymorphisms from an alignment of sequences from many individuals. To do this we can read in an alignment and process each column of the alignment determine if it is polymorphic in the individuals assayed. Of course this will not work properly if the alignment is bad or with very distantly related species. It also may not properly work for gapped or indel columns so we might need to recode these as Insertion or Deletion depending on the questions one is asking.

The modules to parse alignments are part of the Bio::AlignIO system. To parse a clustalw or clustalw-like output one uses the following code to get an alignment which is a Bio::SimpleAlign object.

use Bio::AlignIO;
my $in = Bio::AlignIO->new(-format => 'clustalw', -file => 'file.aln');
my $aln;
if( $aln = $in->next_aln ) { # we use the while( $aln = $in->next_aln ) {}
                             # code to process multi-aln files
      # $aln is-a Bio::SimpleAlign object
}
   

The Bio::PopGen::Utilities object has methods for turning a Bio::SimpleAlign object into a Bio::PopGen::Population object. Each polymorphic column is considered a Marker and as assigned a number from left to right. By default only sites which are polymorphic are returned but it is possible to also get the monomorphic sites by specifying -include_monomorphic => 1 as an argument to the function. The method is called as follows.

use Bio::PopGen::Alignment;
# get a population object from an alignment
my $pop = Bio::PopGen::Utilities->aln_to_population(-alignment=>$aln);
# to include monomorphic sites (so every site in the alignment basically)

my $pop = Bio::PopGen::Utilities->aln_to_population(-alignment=>$aln,
                                                    -include_monomorphic =>1);
   

In the future it will be possible to just ask for the sites which are synonymous and non-synonymous if one can assume the first sequence is the reference sequence and that the sequence only contains coding sequences.

Summary Statistics with Bio::PopGen::Statistics

Pi or average pairwise differences is calculated by taking all pairs of individuals in a population and computing the average number of differences between them. To use pi you need to either provide a Bio::PopGen::PopulationI object or an arrayref of Bio::PopGen::IndividualI. Each of the individuals in the population need to have the same complement of Genotypes for the Markers with the same name.

use warnings;
use strict;
use Bio::PopGen::IO;
use Bio::PopGen::Statistics;
my $stats= Bio::PopGen::Statistics->new();
my $io = Bio::PopGen::IO->new(-format => 'prettybase',
			      -fh     => \*DATA);
if( my $pop = $io->next_population ) {
    my $pi = $stats->pi($pop);
    print "pi is $pi\n";

    # to generate pi just for 3 of the individuals;
    my @inds;
    for my $ind ( $pop->get_Individuals ) {
	if( $ind->unique_id =~ /A0[1-3]/ ) {
	    push @inds, $ind;
	}
    }
    print "pi for inds 1,2,3 is ", $stats->pi(\@inds),"\n";
}
# pretty base data has 3 columns
# Site
# Individual
# Allele
__DATA__
01	A01	A
01	A02	A
01	A03	A
01	A04	A
01	A05	A
02	A01	A
02	A02	T
02	A03	T
02	A04	T
02	A05	T
04	A01	G
04	A02	G
04	A03	C
04	A04	C
04	A05	G
05	A01	T
05	A02	C
05	A03	T
05	A04	T
05	A05	T
11	A01	G
11	A02	G
11	A03	G
11	A04	A
11	A05	A

01	out	G
02	out	A
04	out	G
05	out	T
11	out	G
   

Waterson's theta - theta

K = Sum ( 1 / an)

Tajima's D can be calculated with the function tajima_D which calculates the D statistic for a set of individuals. These can be provided as Bio::PopGen::Population objects or as an arrayref of Bio::PopGen::Individuals.

The companion function tajima_D_counts can be called with just the number of samples (N), number of segregating sites (n), and the average number of pairwise differences (pi) in that order.

Fu and Li's D can be calculated with the function fu_and_li_D which calculates D statistic for a set of individuals and an outgroup. The function takes 2 arguments both of which can be either an arrayref of Bio::PopGen::Individual objects or a Bio::PopGen::Population object. The outgroup is used to determine which mutations are derived or ancestral. Additionally if the number of external mutations is known they can be provided as the second argument instead of a Population object or arrayref of Individuals.

The companion method fu_and_li_D_counts allows one to just provide the raw counts of the number of samples (N) number of segregating sites (n)and number of external mutations (n_e).

Fu and Li's D* can be calculated with the function fu_and_li_D_star calculates the D* statistics using the number of samples, singleton mutations (mutations on external branches) and total number of segregating sites. It takes one argument which is either an array reference to a set of Bio::PopGen::Individual objects (which all have a set of Genotypes with markers of the same name) OR it takes a Bio::PopGen::Population object which itsself is just a collection of Individuals.

The companion method fu_and_li_D_star_counts can be called with just the raw numbers of samples (N), site (n), and singletons (n_s) as the arguments (in that order).

Fu and Li's F can be calculated with the function fu_and_li_F and calculates the F statistic for a set of individuals and an outgroup. The function takes 2 arguments both of which can be either an arrayref of Bio::PopGen::Individual objects or a Bio::PopGen::Population object. The outgroup is used to determine which mutations are derived or ancestral. Additionally if the number of external mutations is known they can be provided as the second argument instead of a Population object or arrayref of Individuals.

The companion method fu_and_li_F_counts can be called with just the raw numbers of samples (N), average pairwise differences (pi), number of segregating sites (n), and the number of external mutatiosn (n_e) as the arguments (in that order).

Fu and Li's F* can be calculated with the fu_li_F_star and calculates the F* statistic for a set of individuals. The function takes one argument an arrayref of Bio::PopGen::Individual or a Bio::PopGen::Population object.

The companion method fu_and_li_F_star_counts can be called with just the raw numbers of samples (N), average pairwise differences (pi), number of segregating sites (n), and the number of singleton mutations (n_s) the arguments (in that order).

Linkage Disequilibrium composite_LD from Weir

Population Statistics using Bio::PopGen::PopStats

Wright's Fst can be calculated for populations using the Fst in Bio::PopGen::PopStats.

use Bio::PopGen::PopStats;
# @populations - are the sets of Bio::PopGen::Population
# objects
# @markernames - set of Marker names to use in this analysis
my $fst = $stats->Fst(\@populations,\@markernames);
     
   

Coalescent Simulations

The Bio::PopGen::Simulation::Coalescent module provides a very simple coalescent simulation. It builds a tree with individual.

Some very simple usage is to generate a few random coalescents and calculate some summary statistics. We separate the topology generation from throwing the mutations down on the tree. So depending on your question, you may want to generate a bunch of different topologies with mutations thrown down randomly on them. Or if you want to look at a single topology with mutations thrown down randomly many different times.

use Bio::PopGen::Simulation::Coalescent;
use Bio::PopGen::Statistics;
# generate 10 anonymous individuals 
my $sim = Bio::PopGen::Simulation::Coalescent->new(-sample_size => 10);
# generate 50 different coalescents, each with 
# potentially a different topology and different mutations
# Let's throw down 12 mutations
my $NumMutations = 12;
my @coalescents;
for ( 1..50 ) {
    my $tree = $sim->next_tree;
    $sim->add_Mutations($tree,$NumMutations);
    # we'll pull off the tips since that is all we want out of the
       # coalescent for summary statistics
    push @coalescents,  [ $tree->get_leaf_nodes];
}
# for each of these coalescents we can then calculate various statistics
my $stats = Bio::PopGen::Statistics->new;
for my $c ( @coalescents ) {
    printf "pi=%.3f theta=%.3f Tajima's D=%-6.3f Fu and Li's D*=%-6.3f ",
	$stats->pi($c), $stats->theta($c), $stats->tajima_D($c),
	$stats->fu_and_li_D_star($c);
    
    printf "Fu and Li's F*=%-6.3f\n", $stats->fu_and_li_F_star($c);
}

print "Stats for a single topology but mutations thrown re-down\n";
# if you wanted to look at just one topology but mutations thrown
# down many times

my $tree = $sim->next_tree;
for ( 1..50 ) {
    $sim->add_Mutations($tree,$NumMutations);
    my $c = [ $tree->get_leaf_nodes];
    printf "pi=%.3f theta=%.3f Tajima's D=%-6.3f Fu and Li's D*=%-6.3f ",
    $stats->pi($c), $stats->theta($c), $stats->tajima_D($c),
    $stats->fu_and_li_D_star($c);
    
    printf "Fu and Li's F*=%-6.3f\n", $stats->fu_and_li_F_star($c);
}

   

Bibliography

Disentangling the effects of demography and selection in human history. Jason E Stajich and Matthew W Hahn. Mol Biol Evol. 2005 22(1):63-73. .

Population genetic and phylogenetic evidence for positive selection on regulatory mutations at the factor VII locus in humans. Matthew W Hahn, Matthew V Rockman, Nicole Soranzo, David B Goldstein, and Greg A Wray. Genetics. 2004 167(2):867-77. .

Positive selection on a human-specific transcription factor binding site regulating IL4 expression. Matthew V Rockman, Matthew W Hahn, Nicole Soranzo, David B Goldstein, and Greg A Wray. Current Biology. 2003 13(23):2118-23. .

From radams at pub.open-bio.org Mon Mar 7 08:04:54 2005 From: radams at pub.open-bio.org (Richard Adams) Date: Mon Mar 7 07:51:01 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Graph/SimpleGraph Traversal.pm, 1.7, 1.8 Message-ID: <200503071304.j27D4rDT028212@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Graph/SimpleGraph In directory pub.open-bio.org:/tmp/cvs-serv28196 Modified Files: Traversal.pm Log Message: pod Index: Traversal.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Graph/SimpleGraph/Traversal.pm,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Traversal.pm 10 Nov 2004 09:40:06 -0000 1.7 --- Traversal.pm 7 Mar 2005 13:04:51 -0000 1.8 *************** *** 12,16 **** --- 12,40 ---- =head1 SYNOPSIS + use Bio::Graph::SimpleGraph::Traversal; + use Bio::Graph::SimpleGraph; + + ## get a graph , $g. + + my $traversal = Bio::Graph::SimpleGraph::Traversal->new(-graph=>$g, + -start=>$start, +   -order=>$order, + -what =>$what); + ##cycle through nodes one at a time + while ($traversal->has_next() { + my $node = $traversal->get_next(); + } + ## reset traversal to start + $traversal->reset; + + ## get all nodes + my @all_nodes = $traversal->get_all(); + + + + + =head1 DESCRIPTION + This is a helper class for performing graph traversal operations for Bio::Graph::SimpleGraph objects and Bio::Graph::Protein::Graph objects. The documentation ocnerning the use of this class is described in the "Graph algorithms" section of the Bio::Graph::SimpleGraph modules. Only the methods are documented here. =head1 FEEDBACK *************** *** 34,40 **** http://bugzilla.bioperl.org/ ! =head1 AUTHOR - Richard Adams ! Email richard.adams@ed.ac.uk =cut --- 58,64 ---- http://bugzilla.bioperl.org/ ! =head1 AUTHOR - Nat Goodman, Richard Adams ! Email natg@shore.net, richard.adams@ed.ac.uk =cut *************** *** 64,67 **** --- 88,100 ---- # can't be in DEFAULTS - circular includes! } + =head2 has_next + + name : has_next + usage : while (my $traversal->has_next() ) {.. + purpose : returns true if there are more items in traversal, else undef + arguments : none + returns : true or unde; + + =cut sub has_next { *************** *** 70,73 **** --- 103,115 ---- @{$self->_future}>0; } + =head2 get_next + + name : get_next + usage : my $node = $traversal->get_next() ; + purpose : returns next item in traversal or undef if traversal is exhausted. + arguments : none + returns : a node or undef; + + =cut sub get_next { *************** *** 94,97 **** --- 136,150 ---- } + =head2 get_all + + name : get_all + usage : my @nodes = $traversal->get_all() ; + purpose : get all remaining items in traversal as ARRAY (in array context) + or ARRAY ref. + arguments : none + returns : an array, an array reference or undef. + + =cut + sub get_all { my($self, $val) = @_; *************** *** 123,126 **** --- 176,189 ---- } + =head2 get_this + + name : get_all + usage : my @nodes = $traversal->get_all() ; + purpose : gets current node in traversal + arguments : none + returns : the current node or undef. + + =cut + sub get_this { my($self)=@_; *************** *** 128,131 **** --- 191,203 ---- $self->_present; } + =head2 reset + + name : reset + usage : $traversal->reset() ; + purpose : restarts traversal from first node + arguments : none + returns : void. + + =cut sub reset { From jason at pub.open-bio.org Sun Mar 6 10:05:14 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Tue Mar 8 09:25:30 2005 Subject: [Bioperl-guts-l] bioperl-live/doc/howto/pdf PopGen.pdf,1.1,1.2 Message-ID: <200503061505.j26F5EDT024722@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/doc/howto/pdf In directory pub.open-bio.org:/tmp/cvs-serv24692/pdf Modified Files: PopGen.pdf Log Message: updates Index: PopGen.pdf =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/pdf/PopGen.pdf,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** PopGen.pdf 23 Feb 2005 05:00:00 -0000 1.1 --- PopGen.pdf 6 Mar 2005 15:05:11 -0000 1.2 *************** *** 6,13 **** endobj 5 0 obj ! << /Length 2733 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gb"/*l]9dY'*#[qKg,.H#$!6Bn%;ea>q"!jjo'VA/+)gt=^_D#ZLdHr3KG!,F"XNg$=Q7^^I`a_[5ob-9n+uqq.s>!Sn424)No2cJBd"hM3mn-";OH'O[jrt4^1+b9gPL!LY$98+AJ,61S_n%`LX3XT@Rr$"J(-1%8b<=Stl_KZbB7lO_18QYTn9's2hEfY837H"blSBDjqQL1Y;+ck8(,&-7,nodt3bkDD=\0Y.JF\;#RU]"VaVTsn57opW>)p,boO:YVo(pD7Cs-qh>eHul+`(dXV&BmTl2'd.e@$jn/)DYujPY@t]2(,,TuS(J;-cPMsDM9iD7TG-3WDVU!\ZqIiVofl':7"OM771__YGY<*::H! 8+C%k[+.A.ao[lWXkS(Y8&*ZORu,f=,t`#NC5Ul^Xrh_"Yp_mtoSeI.*p`Bk]`e\;mq1Gm2ttagQ>gn*JLj;Q"p6kQr*H!@"L)VK,5(m.Tkc&X\XcV0cKJA/lVK6t6&41P:\Ds1W-BLaIH5d322iI3\]a70mNBJV[/MrU5K@b2qBBodm%Kbq)NRTK[7,Tb_:D?>&]7cJpgLDqM4UDo8?re=W$QU3Qu<;Xf7J/SE@!+3b!L758e)4&.:)Q$Q67_jkB)06#KQhHAkA]\s*eQaA95Y;5QKA_k#9P^Ml_S>e;eVZ*)r&B4A2Z76aL[X#3Ck:??no?GM=9V&.=p"rE1/"m\e=L)GtFV"m;f8,Y!X)W>:>6O#*E*sR_1d=QE;YZH=!"+KX#%1$eeaP2S?G:dB86Da.DD@!%caS(RQmU2%]\h+sFpNao.0-f+BNUC`V:A9]:oU9RDu!e%hpGd9=r.F/>C(=H&!L5ZSZ1u_:hi/P-uOE*<6Q-cZuI5+8MB>1?9i6Y0oRRX;7++hN))N.rJhUSMe-H+*3I8=&C$]0*M55#e-jHVGemiC>'=@5`4CYir+#'Sb^h+fLJRVtbqBXsAtU^E*W4X`!9m=s&:OsMda9b6:F1trt9(g5/-mYG%F('XiHMOJgYmqUcEWlh9$:JST]M9BoR`U98W&68_QO/JSdE.$=,l55W7++Vp+A$D;H?pb59N3nt]5>GV1e#s)ZM.AW0e"bi$_`QGu?XB:l+nh+PY#[9Ko+:qf(S<4i"Rl"JJYq"01UkNae:`[MYa.EF7RH)7KuA];_J1aBDY)q^H.S[75=sje%S&iNef[X0!-O@tT^ECr_61;I3`470;_kE4ciD=*[8W%oBeeJk8! #9-NdA)S7IEQH_:j@ee[qig"W0Yd3]lP$fV2^::0a%3X,,DG;FB>dq$*qX0+L1gBSI%e7o.D-[!0#SU2:KoQ$snKmbRB4H1P9*Fngfg_Q=B`6_oPs1PZ08jJo:<]rp-QfJ_J">W7K*!URkMJ"`M+H@*R`&crgTZ7Jib:P),_GmAH-mqJg539J7"BT:"c#*%S8&c0S;L"2-iYVX%_W%aaGNnh"LpR"ggp%.UFjQ9il9SLQ=9SUY$hh\B:X8?@r[nb3=BS`p4g1om%'/*Q^XZ'j'$2""\4!5B&ABJ4TVA04i?%O2`0@N[o\Os!7iM;7e0QK6N`EJA?G6jG&*a`la-ATOU::G';CKkL=`-Un_cJQBl0`SVGm'&"jO,GqVD)F/PEl]cLQqN;I^Xr3M>ZX1<\rUgT>-S:EI@/o6`U5iI6hN)`"sF:F`lt1A*6<_iX[#:"$R1f#&"8qKTP!i09[dn05eUe(Cd"_\brE.cK=>WC0V)&t4`.QLcSZZ*a7JE3YNe@FW0g:GEG+m[=C-Nr"ikDX\%2:S`O"Z445hGq[Mb=dMgXm5Wr=_#_g&ou>mdVq~> endstream endobj --- 6,13 ---- endobj 5 0 obj ! << /Length 2645 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gb"/*>E@OI&q8_FTuRTRZQcAa:__Qha[q?mS!,f@g?,&iA_L`?M5i1tj*tFm,a,Usm6Qi2kRmBIR5$]A%R1GYeEl5geMg:/LB^9_&9eWr%Hm1,GjN\keKk'/p?%Zqn,_C,RBT'bhG53N@M-q2#dXo)jd&g9[T7<2t3]K&iL\^R?c@02%sZDY'D4/7,VA@la!W5+l#PYpZ".'u>)Z;E$$^_]K!d(&CY^!/AtPk'uZ#A3KGk@]n'T)?([aL9@[R%\SEV]\.,=[CbHmnG)I_NA@G#AqqM+N,=[7F888(^lO[Lef1Qo]FIX"W?<##QmlkJs$#'g-;HPSM/s(5c.h-]$d!\oo48\e6ek0c(B##gH!%73%&s-#Eo@jX%0ZG8,::eT=0fp3^&`>7e#92%i[\F#`:#s`t6]e+A:AV%\#c8C]_++Ho^+;)1i+BZFWi&,*dqVh-4.<3=WN4X=]<-/2kMjnDl4h9mKfa,41O;3uDW4WJ67+OQ>f(u\X(%,2e'2Z'8l1lg=4Hnp=04r2eC@9eHdsj>L/A$^Mo+X=#"0%<%)dq*YXn!Mh`,P0W?(8;.]$kXm0nF*kIh8Sb:id/7:VZmZ>QWhCV)nTnc%Vp.$jh",mPcAJ*#NM``ScKqZI9aYdi[,42dr3jf&"(+_Uh%Cs]E\6u`!"m#`+2fiBC&:48V$1lDRb"t,JaEY4BU5otSPcG'h2FTD;_cV(6Y3e%Z;TobKp=g+E?H/`']\gUe]3`3-["Qd[Q"&J)#TBO[:4\qaT6sdl0a8K,>&mZpXJHs5mDYo9TccJ`C/l-4O7BDVrirhG$X`mDBOY7,1TRZSc3F;%Zb^>_K#BP2WRX0:c5@k@-A^eio[i;;(`0En$2XIp50)d[Ppfd3QN\tE*A^,@gM<,%e=8Fk`*4! t%G(MAhaem2Kg+2AMLuH,&J]1DLQqTM?$B1o0:2Qdlp5>g,Aj3P,As#60__t=`5.*:+E+f%3N5>Jg!0gG)-WseWrEVP0?g?^Mmj(/aJ"EjcH@or?Qht[76gM;o_AJY*Q/d]auR2$c>QTI2Il;U6%9S,j(&CQ"u8)n1l]W)aj%>N?u\h%EZ0nCf7(TMHDsd0TT5]Z4ToQd-`[D*"BIMcED+l^+`gHoB9W8pXd01T>*`Nq,Y.l:)-U1<)/YAqFQNA7l@i5s[BL=Zl69cc)KVUOG[m1K8n5M>2<9?XDs-&#=f1;iDrUL:jUq/@_FQj:Or?6DG`4ud29PjW>:.#>p,2c&U$61W9kk53sq`EVIIbPKdJqkjLbL4*fRFDe0d"_/Y1Dt_uqFLd7cS6EG!%:94g*!Zm:=^V+[rtn5B2@^jR5S/d!JBt3LGe:#+?Th_f[,ZVPPKcd(4U.X0*=REn"3l(?!)"bf&H~> endstream endobj *************** *** 37,41 **** << /Type /Annot /Subtype /Link ! /Rect [ 120.0 451.662 169.44 441.662 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] --- 37,41 ---- << /Type /Annot /Subtype /Link ! /Rect [ 120.0 445.412 169.44 435.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] *************** *** 47,51 **** << /Type /Annot /Subtype /Link ! /Rect [ 120.0 440.662 237.1 430.662 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] --- 47,51 ---- << /Type /Annot /Subtype /Link ! /Rect [ 120.0 434.412 237.1 424.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] *************** *** 57,61 **** << /Type /Annot /Subtype /Link ! /Rect [ 120.0 429.662 204.74 419.662 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] --- 57,61 ---- << /Type /Annot /Subtype /Link ! /Rect [ 120.0 423.412 204.74 413.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] *************** *** 67,71 **** << /Type /Annot /Subtype /Link ! /Rect [ 120.0 418.662 360.0 408.662 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] --- 67,71 ---- << /Type /Annot /Subtype /Link ! /Rect [ 120.0 412.412 360.0 402.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] *************** *** 77,81 **** << /Type /Annot /Subtype /Link ! /Rect [ 120.0 407.662 484.82 397.662 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] --- 77,81 ---- << /Type /Annot /Subtype /Link ! /Rect [ 120.0 401.412 484.82 391.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] *************** *** 87,91 **** << /Type /Annot /Subtype /Link ! /Rect [ 120.0 396.662 358.29 386.662 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] --- 87,91 ---- << /Type /Annot /Subtype /Link ! /Rect [ 120.0 390.412 358.29 380.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] *************** *** 97,101 **** << /Type /Annot /Subtype /Link ! /Rect [ 120.0 385.662 354.63 375.662 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] --- 97,101 ---- << /Type /Annot /Subtype /Link ! /Rect [ 120.0 379.412 354.63 369.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] *************** *** 107,111 **** << /Type /Annot /Subtype /Link ! /Rect [ 120.0 374.662 214.17 364.662 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] --- 107,111 ---- << /Type /Annot /Subtype /Link ! /Rect [ 120.0 368.412 214.17 358.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] *************** *** 117,121 **** << /Type /Annot /Subtype /Link ! /Rect [ 120.0 363.662 172.78 353.662 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] --- 117,121 ---- << /Type /Annot /Subtype /Link ! /Rect [ 120.0 357.412 172.78 347.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] *************** *** 125,132 **** endobj 26 0 obj ! << /Length 2658 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gat$:foFfFn9r'g%g@+YA/3ojMABmP.g:g-W.@'AK0Y`9S#n4jP+8ZGoc8lVc&e7)>o57T,B5?]8\J9a]_XWlH*621f%V-f[Cbs00)WAIkE!^&oc5\gXUhHCG@+m+bcC`^lJ><8-X#8B]B2@T:sde\r>?GCs@[(hFnokX>Rc1>hK&br%5JRC?>=-]`:1F9#Lf_8)`o0JUoH^)F>]g9hO/O(ni;%")?=%."V2c@g`quFfOC.#[T's54,79snbDc1HL$4u/V]D;qE4Wn;$sgp5[BXQ(G"j.V?Ih1O065gu@s$Q\HU=6*$";U,NK"[H0LbLAuh+giDhW:ZWOM=A+e!/?]N#pU*MN)=%nG4LQiX^-nmk9eh>e`kG&/S#(W5pph*?5O0Yd:J0S*2FdF+l?I&qSj:TedrZUSCU\;QY_?68Vi@.2LUZ`I`%q<=WTo>BHY8/Qm`NDPZI+YP6WB8_R]"SmeV\T%cQ:8]jN#WHBIqo7g7%def,q>'+g)<\Kma0LJD$IMYcZ'+F5AnZ5M]%P5@qK"ZdH)hiDE.M&J0%j;gd^;l&A5^CoL3*''T,)5N38VGHhnR#_LR;)WPHS#cBC!+d.6]EN<(l/N\_RfX(`MH=hDjs4AK#ktu1#U+G?h_urkPFs0\p0@AAj(Ll9L;2BM!m5\/_;j=4XS6k3(oHj!Yotm[1rk0__sHWDG_FEW"S! TmED7Y:^Sbs>VANgkg%4QI!+1$SU^>QB`)Jt)/`mZY=^B`*N=NSYO&8Nu^`H$HXMu1_In]/2burb#r45X&fW!.u4Uq&/XAJs&kTiI4F\;R/N!TDM1rWNp!.&R%i2.aKUWFJB84;hA/GSA9>ETl:;-"rf5No`(g.12-(@j_3s^os<3MH'V:r0=X]6'.7Tf4-0.+#lU+\R,.R)nrn;'dd`E#R(&GtUP!,UVkFjUMc4VUSRAPYi:Kb2\-,'uTZ"p0PVBI($4Q[*Pn.?$;Z'R@IKLIH)KFsrfBLK$WV0]NcA)q8sQj<2]6o/fcaj3CX1+]K&)@N5Q;Go:^lpUOD>N53-2%J/q,gE3:9$TYRkA.@m)r1X**JM@qk6..l*T'"^PhB)cV/\-de6qs>8`"UcC"\M<5^$+++QnN\=YY\.CNVZF+O*)!KbSh`7E%N'I'mkG0cZE('IIHg9DmOF&dDDP'I]GY01/B11Qo-+Y&I,p03-+\:cU0mW_6::jjko7@Q0cOR6hDji4\T=>/kqpc"2MaifM+a^P(Tt5k*o(l_C&j(BS7XK3.YX4sEj29]dMT/F/KO0PJ^SgJ.5:1l*IW524Osud@Id"V1\L>q?mDAAp3R;i]9>k)man5Dd;q-O#3Lp[G.(js7s2jZKAT@hD=Dj#W*aX6kAChDY&!Q9W>-m;%'>k!7@&X04.51[/NcnqP=! hT9eKDqK\49-H2[!R>AT75.m4f,UM3SEb#dj=.18D=Ck-_b/!aistkH^,E!XJCR_":e6r3Q%kCT&P4]3Ka$O:@uk/h+p/Rdp%f84RC%pE>>sD(DPS3+o`_CVqD:$Ms5Z$%6AQg8ohQ5LAf>f]MeejGfK#$Gco=0bM@^;AgANpQ(sm5ZO/)hH)lPiD=dsIfSag-:nWsi+0dD0NF1hAXbN)6N/Ngp;'PAcE%d6;RW[.:5rRcmd[Ph?(s'lu16Y_p[FkjrV,&fb[P9'TU%`@*ZXT98s.0]u'5`Z(>]LN^XZ>p%f@#1nh@S(F1sJIUr64[]S`Y=2]%=qFA/7YV'%FV0CM/b8aK+bi9&>5`_]7XrN1=m"ni%/YFV#ah8KPhY;Ha#"qaT/XBM'/3,t/3[QK&INkXK!C@`)AZ'6_e7X"dWq6>If1P17UU-s@uQIr%'S]`&K_ucMW$Vj!urJ-l,:jMMl-It79p1'.%<)caA;,kcdO9'WC':0!61E\#4GoY=3$k6D/]EdH*aC63^86BYtEY-+lb@)FYH.300C=C+`G",*QsGWrpej:!;m7Y%3c@?5(Tg8=HkiVS`$NpJNKkH"\sl,I%p3ScieqI~> endstream endobj --- 125,132 ---- endobj 26 0 obj ! << /Length 2567 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gat$:CQI4.o)&CnIlLgL+Ns'KBQ41ooPlR'%^_G9+E8gFas@L`$%.*BtK9')pX80(["B)>sE`0A%E!L(9H*5&&E#X&?Z*0(TtVg6KUSP_L/cJYMR$?/,HHariJE_`4PjF@p=qemp<2hi](THlBN4Q]!BMjn&@tA>[#Wu0>1Qp5$FV/[VLZm]<2`Q7!#G5_OJWobD%bkHb5UA+SigbOe-C-e*GQ)eb\H_nlZhKjV>O%_5Jbo'kG(g:h>su@i8m@5?.=$6B2,'gJrlmS2(BPZUo-'Qj!E\j8$LXkNrGMhu(=VO`3>J`$CUDo-,lW=)t#I7gVgSY`>g>QFGoo?64P8L;"GRa;^%!M/c%/f]B@OT9"ZR^63uG)cUcXm5_N207;RJc0u?Xj,T4FI95BlEW!ht8n3g+2F(5R/1A]I!9^N=H6U@7[,ORe_f62jSJT?ZU_lQu&'N5?>:aB,N`i`mIOn4'C,+`k?s/mZJf]S*OBrt6UPf4mDD;D)(8cel+#Ft<>2&i/on8DBMhEdT9W(Z9!T=r8?NC]RbYJ]=O/DUklqbKg7H!"Uq%94).]sLp"K&-%crPPQ*SK-#F_-np^-1q3H%2o#RMtqunB+%TN5VK=)n5:H&ag%dC\BJ(+A]I]f%i81[EH_'09Mg9Kn'UBUD3UChM"nX27d_sq^0V=J:fboVl1VOE[BL6TRab[T-b6"n_ids$JiTor4fTWlM':_! uOfqk(:JqR!NDC7#,b;IeNb5lVn0<%*L+4U%`_t"(HF1E;%+8^ni3I,jj>>C$@`^G`DNuOs,(VkeVTmPgN4#n@'"@+0LE;qjgZG`#RLMeL[%T3P>n#d=HYacT+QIb'P>q_%3K=62QF[@-BHeM_4Qu,$F/nm(/SUAlWS>q=VYa#P//?IKgnUo(hA7+$j7REd7>6ZY4J]WJea8K4=n%`-b4o`-+/X!RQ;Es+HkiFV'`[LG$5e"e:nVWpCke7O,:)Z>]##cLWbFF)'`0ERWG>a%rG>L8`QjiGR=\T1rS=Ga`5b:OK5NUT-Or^qd)QM4#Su9emJijh*_pq))*.'8.^mZL?dVBt\9Z\#N?drF-CO0N6d\-FP#iQ]j*T=PtbYU8,j-/pU_qe2+_Zr1PKL?V1311's.p3DCOIP$,Rjl+O'@+8s^KK#Ph>1-]$@W>',qObk;r=+VRADkmO(H5D=3"3k+gT)?ig-*2SDY`tgM/r6Pu$Ob]:,=_f\>K$&0MlJil&ECk+#Q:u`6%>k;d8ZITN4Wh0&9'p`.?B,5iJQD/q4cQ]clb?.Is0i9l7d<3SDJOCP1%BX`,oSN,XS%DI(\u#bbP%Gl\EgX0:R%/OiK0b#Y>7"ZjL1eqQX_%(ibr'7`W#Jpn&q:@L4'iX.>VMa#?_#kPr_Q?HrK5gR++` endstream endobj *************** *** 140,147 **** endobj 28 0 obj ! << /Length 2472 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gasa2CN%rcn9]VIt-E2/Bnm6X:Cb7,(rm;%r&%q=gZ&UNfb*\F:\ab#B1F]l#AnV1!ZMcH"\?BF>q[Q*0nLA)31'fNWGNK(HE2GD8VQ8Yc+1QiU`es,N]Q,gEBpT-U'3#s&5qtq+@C4E3sJ)E+OLcE4ga/b*TZY&ZL>O#"%.sO)@%HHEb3NK0TkW@3kiPF)`hr`B2c.GFpQc4j,$YfM''t.RuIa.ZR6=0ENg^HJ4R'sR#Ye]JPFU&4Xi=QV[+9p-uj,-J]KlI;VS=fH"L`GqXXUdLSVT/8*2$I'd'<,6[1H0BViBC`njfeq#/n3B8jD_NAg^o`I^u*Y'EO]ju->o(H1J+f5]d8-HUQAm*4HVM.I\GA,SBR!s,;#AdOn6lT\oNOD]ZqmK+m(8+_%6e*UW%.*.kJF0MGfo(c'H^-b2TfXrogWY3`Ap%YW#Nej]+4ITu"+Qllc;,o&kh=pX9/_%om1`A#KK&C,]88!\eda.Xc,19a>q.[n+/9JbIa[5@fM]!7Ro;O=+B`E;M/;4)V((t)nJ!I.6?.h'L'g5Y8I&?\=kE'"+T`j1/P=^!*YE9LgpK=(dK\$6,^fji;NAOo>IhNQWe/S7^QRjW9gmC6*sjg@)!ZLgAS7,O]>DK`[nVcjIrJ'3m$gT;s!D@r-4U?3So7^aMm++Ga'4Uc2Jf"NYqE8IjgAU>9Fl7njA='S7.t^&X\oL.aG3/dc:&&F?hlR*!Z,f450pL=)nZG45d)#k\Vs/K@NgD@Agb!UjToU\tW\CLer'k&I/XL`#$GscQ8)emp2l$;pp#Bl0M(R@K;!Lb3_EVLNi05O*_AKF[no79gfVfBX+!&Bd2/C6\c,4%oo5'mH-,1/31?@"bSHu(6]\"?(0I&;8]8G1g[jNA\\5L8\SXA["fh&jCRm;:V#cmKmQF3I./nl7W0u!K/aW@`ko"00NX@uKNoV[f)OOs6._uQN-;R2pbB7]0YJ\K6`Z:0XCN5q3B['#>UO.8P(g&\fV1I-`$Yu/c#%BY>Tp\P@FMb+lMW%@[SZ0@IQ9EgN3CtFb@^aVE.p3guY?FhO+oAMiVdm]U,9>6%>%(`rH1>'LJnOSqN<#V#>GLgMXe8E)RB_\OguI5E0`Xs4"LobklmEaZR3U_UZ"%SS!%T^sio%7/1dgTW)o?VImt_+[-=GI1[@WapMCsR8lN1M1)$hGsr)f4BDU31pqT[c=n))=l2@l]f6[s`&Umbaf1tsr49/_5of.[+X"b]B]pbDc4^(CodjW5EUnORmo#ua(InrY8W^.u6%"g*loJ6kAr8"XW&_.?Y@h?@"4g?a,l,>[sV2(".g%[SQjHk'<-cmJ@]HDP`A! S<_Sa>`uS0`3==3N4)*,>gMVccj[\]-X7kT%o4E(;n+c(q=CfloBJS1LK(sB:dDbP?O0e-]q?K:B_T=!-B@C3=2i^3Q$T%0QJa+Yd:pPK+cjm`,rVZ*Pq-/*2k?]G&UGPRj8Xjp!Xl\=W4f`\c%q`r*D%2FJ_rlO*+0fn~> endstream endobj --- 140,147 ---- endobj 28 0 obj ! << /Length 2568 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gat$:CQIManb`:m"$OH3^m`[JYsC"PD=?0m88ap,c%koL^m/T&4\9`aGrPWh9CX/8[Bt@5^MlZ4-YJ/io_nXO]+=-M$rF01Dm+c3mODHEiYO5aBLLuKKYi,ADASqJhpjS).-khnZWP18MScYMMoG@LFDQ1^&FQ8Cgpr52iki4.8aW5V2VTus6+`RLdJ>h(iL(2Q)5mFKBj^kB20H[@AD"5V,+)_F[q/:OSnY[G=aXPWs#G.)I;sR6&0Sl%((9n:CGkq0dcSlI0`gUh(qlcgqdc#AV4"O_0?N)P#Iga/53F`hkdcre[O`oUDAhG_d`[t&DP0e%@IWAtF_NAOUo[AhJ2]bGSU24gt@#&6Ea-a:pb3^,%AL5Wk<6e7I"]SE.6Lq8`$nrfhWA'J*!I"V\+T]%;Lc1cl`W@V*cO(_DQ((tEnB!Tdb0cXZGU*2DHtJn/l!(ZP;jn["fn*]Wi$(BbaF5q?dD*5np8]kR'9pS*QI07$8'GZN@!3[+4E:po*@+L]1dNmk!--nC^J$I8TjE[;p?$l:;NJ!QG:)*O]R7mWA!*)pL2=0LgL7M#.0!jin;Vcs@Z;=/s=+*o9@#2AsY'fXNu77\pV?AB#>;j=ouJ=Akeek"]uCAfi3Oh%JA,N:%;aQ32k19hE5PJ=2HZBC;-PFg6TS?G1lequiPgD1oWc6g=2/65]4rV^!?GEhU`u>p,Z?+>_HM[BI[#blXhYG*=\Hl>qJ59U@ncQ[/e_BL=3`/`%Q'g$S"*A#XK_d^\#DN;RLjV<^*"p9_&p/,.P!2k_0/(JQN,)-H8R/:g/>)*Q+(\'RIM^Km5'9KR^/C64Xl*XgJR-uW6\R)G)S"&/jACGNI:kbNFS#!;?/[2n\dk"dun.ScoV-LJ3L@3).ZHubqQ2^C`OK4md@1',O34"]?Sso;3lhnIlUWM--*Dr4Ld9?g;&W'bgdL[OIZ4iRYM\GJum:'$n%q(Nl/r"7VdQ='Z1E,\u*[BfOlobaMbXBR+3SD1n@>r23L>MM3e/,a833`Rd)H[?o>>5oq!Y2a:MK]'jKR7HO"GM+GPOP,84(Rksa9Ogi(mK;S:f&epg2KZBag2>]LLHDe7#Tk%@Kn_dmlt=FiJYV+[Zoc,XQ0ANk%":q6q[pOTe=q[Y$"N2kq=r2'ggeF)Od6t,fKHDf[L\n0tY/Ls5E"AmfDJ:jV/Zi*1:_3"V*bg%B!`aP"6Q?L`>9q4&\RD##Q:pdBY0*pZXUcT9mIDBm3MmG3jChBH:5\57Ui&9"jc&@NM/p\I"1VWD-h;,n`\ab[;b>4T:heZ?.Cc4Lq2X'b\5G(Db0g-*Gfbl,(WC'ItHNgiN:>8-Wjp;1)Q1X,kVJlc(+'A-_ZMksZTS4>/HFbq<[t#]n0! #iXR-2-EZKePWM;eSfFNNNNoUsJjEP;1Rt2U*rjtYJ:#@kTGWl^DrBQP8r,DA;+Tf!Q2^gW]O'nCmPkMUU:8@da4m#;4'kda1\Vl>B\8:DeX/#Yr&doa-aCJ^'Zr#+b+2]HE8U:i?k=erVO\^n'sS!%.PGM/)+WsN%@rZoC1.),JlH*L^orkFn2>FXL>f55=:Q"E*X9VNI'U>'pZiYpqQ7,VF+%QoK^AdZmp\Fh!;-BVq>Y'.1:Qj9N]io%TMU*am#GYF9N"XA`[XA&b390Qj~> endstream endobj *************** *** 155,162 **** endobj 30 0 obj ! << /Length 2843 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gatm=D/\4>&cV3*Ys8\uNHu>QY+uap+E!?#`MI`d\+cRK%!oncZB7\KV"L=!\GtFEMo6c?CYo.eJ;!NM1Ro8%35`G@4+$_4>XW!30(-/\iSs)Q>(lB(>""b]f4>p9g#B/;r;6Ec_q1CH5@&_so%OHL>^hA+j5a\>T>fXDI't4/b#5Q7@2N9>@=5=^X[DpS*4Pu>&J4*r@e(e#P"A=U>hNn%U<&.9pGn_%RRG.fA-)ts>3)4ShH6n%hGI0RMK(^!G-&1&T5Xa@M$(0GI8;R.SMVdV1l9[DLa,ET.jj,f^CfiHjmV)V\UMMV,UnB$AJU@,V45<(:,k#*Dsa`Vq(`7i1CqT]-<\kpS"V>^]XlHIg`n$]ke\n=b`[&MKW>?.I?HcV-soQ?DVk;jZsN6Tnrgp2hF7Mau@h()`m=Rj^Nuc;r5D'PPYn9jr>U6SRnmQc_;HKE8[s1f"n3%Ol#ru@J`*rG@,InVhb(-`oZ:#0gGS)k(ali#mfd!L(r_L7>"qP_DpRO(=SS1$sPe7Fs_L:Fn2$G%kN%96W:uU\@-)R/^sH@F$<+aq"+&sM:Q^EdeefHFXdHWOcV4$HGSl?dJ@+Z*+`i,T-6.WY*ZBZCrK`]&=RUIFHqMe!u@7Br8U39?URPWT@2--\)TG`^N)@&06&1HPbT6.a](JU?IgO8Po]X&mp#Y,-$O`eB^J7/#4f,o#]VoXs&_a1DfFC#?F3XT`(>p:Qi^`Pab[VU$0t)*98_G\S-dkd%2lq$]nPX/2%dkO_6d`45-F:-.&@9CA9VGfl5lBat^/[Rc;O&j^a+"cEW>;\trlOku@$+V@UZ5demX\8E\a1X#.HP\U++f$:Z`C9^)`I?3OSu!ru*ZI5"ke>?jVY@@2fIc+E?/"I$i;dq4/H@^bR.':7gP.^1_nVCrFhKT&H/L6O.W;%YZI=?!Q\FtL5VVfJ0osS&b*od9BB)_IDs6;j?:a%h-SMh6>kH`KCa8XZ:]3.uoh>75&2*,:DA&8dd0J(@[PGrL'Xa6M\rs:rneRtEdBWaq53D0:qGD)f"K9$Gd0DSr>QcNH:RR*>qT.9nUUB?g&ZBFR;m9HtbM[0n$Q!N5-XF9(hGH((Nm$G'a`3_EQ'cHE/au0^q/`$27=QWgEoZhsl=9l+`c?\7<$NVq#kkR:bQf>=>m&Qc'S/@o.!6VpaDP/)7WGG'IiYTj.kQ+rnM(R2&%#QmJCUBE+[m4f^[:2pcCQ"+Np9gkl!TgP&EYd2ar2cb`9M0n:.#6l.E6a%F%0VeIm%A.mO1nqg)X#B42[NUXpR[MAALER:XG)\YcW\7D/T[*0Kd7fSRqn1J;SWouii&.Z2"P$,-aAT;\Ood_'O%IWJj#HS%e+[4>g7=\.WB>37h5?,$ZlDpKK'M[os3Q[YM%&GU!`MR$V1V__r`]'PX^J!S(F#0d;Wd`OD-ES^=WV7O!?o6q$@?/]grI!n3GIAes-gm'YVdSZ!"qUZ9G\\3RqVk1oT\hkJCnX`afe((L;g%mZ.&?!Iql)T(W3plTBHJN/%Y,a;nPE9<+PeB7S/kdeS-~> endstream endobj --- 155,162 ---- endobj 30 0 obj ! << /Length 3032 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gatm>D/UE)%K>d&Ys8]L61)e,^SJ@>EKaX+1pm^0HQVOiOE\'<2)E\;bcLOS`VoO/0/K?`fl[eg"h9B7L_NEP'ZnVmo'Gc,C(Z.c\6,o[_Ssu,Zj>Vd["pIDk#ECcfj`VercN5TiTol<5@&_sMRs/n]DMqaa2sgi^DG).phXL]<0_'R_D&Q[_YDC8.M(X]$fD(/76ju!M^af38gZ8IE+Prc7$/)Qp2`,022R9Wa92o$[)f'DhB\)41'HQoMiNtS72U75@DdC-q:".a?!pH6HIl)&#+`-&?>(3hBolo*UZXKJn(ulXm1\UMhL2pp@:PH95uki5[s7f]>n*qHKR8II>In;0_i1H0=S9umYSLM;L;3tBo!o&#JYkHd!jbaD1mu/D0>dnP21&s.N\i+'&4^`%LS_oEd4HXHPnqDc3#Tb?g3\p#kpJO%^a!!1EtRDp%I6.mZ1caF5"0uZbL>VQ6?%FW2l3:eY2d6-A3J;bKd^)@?CL??3UM$0l0(-K!5]p.@<%B$#14Ti[putH[(_#'=Qi+XZ[iDm?Odj"jnKX':rK3*L"cL-f^9Y%`LT'hKfikU_i9p,8703*)t(hUH*ksh461L5_U1rB"E7K`'ur<*UPq"hEpGFX@nE9DdF0q5h%BWIUL:,611^uUr@8A>]^e-GqQ6Q]TU)G<;r;OG1_tPa+2=I<7R!`Gp8ZU9>`rP[b2H9Lr+?(dc(da!l6\oC/Ff\')6(o?^4WOaZdiPW8YiBRJ@#+BG>CK4MXVl!@#OKB+8ThVbBr!auGb/-W_5Kqg\f,,s<$8/eJo0Y&79"XnitlY!pgLp74u3o5rBU.nLbq#o\0'JLP'4?QaHNHBFL:ZT(C! qI@+O]g@o-2ikg^GeOI,Y*-6*iTI&Ni(#<83]pI2A1*#8B6H5u!7dM&3$5]!kTg_OsjAa3N@bg[uL5p@rDdnu(?F6O*VJXa<-RK%2;B)IQ7QF2ak[CI^Y=_K1Iea&'cRfh6JL0Na$Kh#@P=aY9Gfp>fmPX5l-)CG#KS286]A5GO`rDL[ODRY!7mt)iS1Hp/O^pG_(GSTWiVu?HjaU)="CsnH][Lk_U_'$:5[7jUM:P*Z1pDK#0(pp3lW&`p.R_Z]*RZE.UC=h68g6l]kL@gE=ZrQ5\+7Z,$c[H'<\pr=56f]S`Kqt8PsQ])+W%-%W]-$&WMl!@._;YGA;FF9St?N/+H9&I%Mm]YB09N_ge\E9^&-Qd-)Obid#U7Vlj61HNf-@fKlGg&XIr-c1pIe?TbZB!$DFmuX6Dbh/XT=hOt*gk+letEH"g5Xrs,(?+k^FY(3f,eeO4G<(#9:Mkr!L"$TbIb.-EPqn?dTQY-;D@"W7jmqM4t\>NA"A./G9/`EdD;,<_+k)m?5CNc"2W1pa#l92]h8R>RjmmST36Wnok?/*e&-O1DehEnT[=r+p!a*bQn5O.7G!kKqhoUZL2(P.7b;l4.V\++V-BOe&R"KG]nkDfiH1AKSt_F7Yf8QY>MGLW.HZf6\&j/PB3#8_V/gTAbW/EY90F$pr`6A`8WPpqO?+i)MXHeJl\`2UNHi!JZ39%9H*0sa=\nT=TDHeR^fm$)3+iH9T0X/9+DC\uP+/l$KR@WWB;b90Mbf)F#,Zjg7TQJZ,T9! ifSdR5SDW,Z0G*#fCr;Lk:iY;ArTkmPOD[9n-Zh)87"g8h3Cm$63RU5G5oec$k*\3X.4-J\e_D/+H)r]%MYELmuh/QY`\.IXUli70WH0_b\,=)jNYl=-P>\Dm%8opE0od=,Lirb$VaPK=Ok*0*66.fE69eJH4A]2f2:tSr?EA(?BHrA(LBCV[W@,/=ne6AqM95/(6W#FkIR2lHMNSIE2t_dcLJqX^]u+bR.Fo'MCqR53^rR%-?%I#+TEH6gN6Hr5O(adnXPZ^1I,`%=ik!4Is3T51+ARa3s9+PO0iE*m\:P8LJXl&h3gr9'dduE!=jJ+c#\eXj"5-5%tp;i"0lZ))6MfuR:AHT0!ULQET8ME=&Y=O=T"%rG[P=`E)a>n>S/!%L3O)q*jDK=hY*HaPL)?g]4e@N\`52cAPo4CM8)j$L^pb5!.N(.pa~> endstream endobj *************** *** 170,177 **** endobj 32 0 obj ! << /Length 1968 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! GauHLh/D%+&:`#5@:TP1$o'8pe5qAA9fi@1RKh-oN*PPt4u@l5@M5[uZ\#o41d>pG2MtGIm\-#EQp#hbMMSr"tB?%sar7lHC21TD9^-s88"?CM)X;j@>tZ5'h]Ub0/0L#;uCQ>Vf$S.^:D4'ZdSWn9`I'[9Qn(/%],`=iS7d'RX-,/.S]WS*em*Zma_'fTgT9NY&GX/ZRm/b3T2"`^aWLGt*Fu/[UY/'Y^%k3;hU8CQNl;S?h&aiP.LfIGU"e^-Tf3=hXQ?iU1)lXO$aoJ?mGI.9N.=dS]:V`JO"rumMTX1aF?3:c&UY6#'G.F])Hn(GJd%A?2+hi!bI@sAZQRF;O`fqa)eBLKc,#tYc_+2u6>%5I/->#Upp:4XA!QGdQahR=VQ"JCI!'gMghF-2_\tC$i:A%KJo!4AQVCIRP#tP8/%f[@&pl5bI<+K$J3?W=oQT3B9Q*I3?,^oEt%qTAdBu.M%:H8j(g[fh! V_rnSJ03lVrCW;5?;0.Y-UF"b0+2T^]`rcf;WcrOh32i0,B&A6jGH0%TG?U5=l6nN$++-#JHj'(2+hdetA-H/3'OEG=$??(1p].a7uof6G/RmPYK`BWa#ooWN!!M&"1(&eaY3dPa/LW,0+&PgIqEl'?WMU7l).h55nQa&feV30M5$V5;=d0*Z#r''gt0WBpCKIR#uP;&l4V[U"7\7G"u'*Kur?MJ?fkZ`)o@@,'ARcs04q"Sn_nSqF:iaNE>P5p,DBa\smChG!;4oql,.\^McPH[Rj]P"(,OUq8t6X(De2NaZP+Dh#9fh@9`V&k'uNn^Zt-N8\,"hs,IP=T0l7Y*VgF7ei;asX2XaSD_^"].6*jfcQP,H4e&dG3$/-:A6sT&4>W[L3r&8rL`Y(i%d`*NA(PX:^%_MnI!G7J2NrG<`;5K$bdlP/C422BX1f*7H#*B0D:^mas)ocUH75XD9'G4mM,0INDd-r]/`g?u/)i2BEu5*@0XFmqjQuI&gf`i86bq>E4s"[WQ103T_kXQb[OY#&NQY5CZikl*XAe5^s+S[s>e'5lm-48rOk%M7XmZhq'-@Cuo!VTT>-X.*pdj^/b?-Z18'f&Wak(oH\(^Z5/K"=40kp6,JDDI*WW>T'9,!rIU_mP*;C*\j#t?1`WR@!1(o%)C<.gC75"8tI-2cZ+jC&b71]]=RC?jB3:mWLhV&9s-3Gm2Sc$.XCccr)Wbl]gI"9j*`XuhO/8Y^ls endstream endobj --- 170,177 ---- endobj 32 0 obj ! << /Length 1905 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! GasaqD/\/e&H88.+_1cA$kX_ukUf5^V-D\c^lSupYRa`Ba>P'FPpf^uRMj$:gIFiB8D-sIprhKMcb8jn4SnI3m-9#c5S&+bCjkG+:M8&Ej:=9_28[^-+GA#kG87Ch6YV%sD=;5)ZR+q,4Y)_H9O[AJDjm`,$`B'bB;PZM%q8-N4p=ggsU/t>__m'hUdJd?oem_['TMm'S.-du;VR@P2)3Q<(*Fai*TF\XC0ph_,L&+;csWKGZu0H/P^Pc)hkqRDS%ENDafihX>[Q+=*pE$9Nrc9r]lk!:<^]Quu]bV89K1e'BSg1q,/>D$qN>+u:M3^+9&$/IX51pgTU@aq7/;A[&Wq,Mj809HV66(OVPc[BVpW/'Z/]Y&+bTg\2c*5#DK%%&#WbfU49hY*i7F3]B6GhCE3_au3kN$Mq0-Htb->@K]i^2(aT!O3q6T4Zoi9PT:tVT'_Je$=9Qf$WF??r5kNG=]YF,lkKoTQQ:81WY#&>iIsuLqiR,,%ej)gH.nit5E#m;E"G!ma%@B];6cr7b+DhEl.&-\Wo"E"#I[-Otom0gM\dn\CS+$%5'L^.M+tZMC:l<"$,`/"`4`,V-<(gF'@i)78`jbGGluQ'O"FR]b'lD>nmOh3$1[$sgj+YeaE-)dCj,AfBfd,"#)^Mi>tV79MP)8#XbWZH0LtV;-t8#l5e#0h-UQ!O)(u/N)EGgsH@pl@]OK4]BK.qK&=_=eY(`(m_U(e%;>4>bGB"Pr]"CATaEdD9G6mcjZg*RWtoI+RG:J.(k=!_fmb5*XY4FHXreH=F@!h[TgbCY.oul\NuQn\s'hE=Lims?Q@!,3&!5Zpo^fmQTXsb5#MKi$h)O*`a2+)U?Wt>IJ0AKV%n&J_L(7_lWnisZ/uh"WUA! FVkr'F%b9aQ[94saL0F-1C"/rEN_.?7%2S1I=m7mN%dh'#X:_K/n$H$[FK]0dhJ*jNLK#dXEP1%s;ZQO.P@!Od$Y>BH!c9^bq(NXcnSrLO[X#.g'[@q7E(+No&XdKr4l11f$YX?@G;NM43,b[G0k>[k)6aZ@pcm%6X^A#&R"F%f,:bC*j-CPD#Qh.$SA(O;D7Z:R'&'c?su+QINRJ\?7tC#&CO3.^mrdd0E/],TcHMj%TFtO^eqRB.&uBJO@>9]+k>LiR(NdqN^34cDA'O>,@\BUr$=7b9F!.DSI-Q]KW+N'DU4op20+%"EAOj?Iu1t-/ZTO*MIAWN+O;XRUK=[CHcZ_mM&ZMZXpJ57%cQ;#_@AU-"nlkf_QrYsAh2Aqq!-E+FU\P>M'EoT9ST:-t'_S-'_[57*T2pYK74P,/\4Uk_60Cf#3\.UPH4eYnV+T<1Z[HJadk6R4Z]^71[AD?!4Ehsk-=?AGnI='fi@8Y,P-+(oM)p;`Ae*PK5p8Hb^O:_2\nU*aJ4L/IWiJs%hJWuT\3BUNSNYP3OW#@Y#iN*p#((\X/,pXTTO!jFN^4j>i-b2O^>Og"HU%pU4F$i~> endstream endobj *************** *** 185,192 **** endobj 34 0 obj ! << /Length 2573 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gb"/)h/h>\&V'O^Tsr`7(PMQ-M4B5c.dTQU'XCllhsP`HFffN`;HA\b'IZc0Tsi6qRHCbD8P^ADpkFohgV1g+P(b;J$%:OSqs8$O^'qEJOM"!5K$!37[/deZ:30"'?XgZ*/Hht78lr`()%F@U660UA"n"k@DRfm@?MGDFoLhfqQBCPFTZ]q4^m3M99;%@SnroK[Q7O@Q$e(#]jFKoW,8hk(7Oe'4&g/R0b'_9U%2fVLkUH9GHY[>Z;&ne!R(=']kK'4sc;(IHhRgAs+isIanPJ$Wa5P4E>MGZ'n3-,:O4\``#2P8^^.%7'42:QXcGQW0)*oO'dc>2f2k!Xu.,b*&Mc`\gr;Y1FcAe$Mu*n"-$'%aTi;)qA6C/HW^:-F9LU^(=j1cDdeJsAjch=F%S2*R&oEibfpA"G!FcAgXAgY8bffD?$n2a`=PmA;kr[PrLCDT,DlX3[RCA*)\)+MES-imk*,1_pKDad5aggaORq*3-AW:cP'Z^sDn?dt(kRB&)V=0m7FMrX)SJX=qmhW$6YC:/eFan,N\eC*dfDc],lWMG">7lZ'[1Np;CXV4UHZC+eIX"M^*8m]UP,p0;"(adEEf'8DU*NFU6M'LL8Aa!+>5WOB8aZ9a:H41(D:^OT%YgXFOO/iVrL6*+g:oRQu7iBb@.nWM"u#ee&1"NB?K)L"#&/K2J:<9:M\+U>Q*(8-^1IY'4R:$.Za84E`QK=X`d#15X5(GS)O`/i2#P5?]).7/R,T/=75godFC.^r_! iGIg!aMdN>EU5hX#>O(99B,q&#Iq;_P<7:jME4/Fh??2G$QdQLmi_aTARsPH:k1,.e=W]&WSpZBP`p-*A]]VLf'c=Po_lbu#Mmja:34I6!XFUbD%4Do5-@-*H=ciLsBLGbV;`o$NZPD1mWYGH;7OhdRZ/]HCLh];%LX`ZSo5g5g&gE^P6t^)_Y`2K,i8#'AH`1mQ?a%=F?8gLsP1?c:p7_X!&+c:t+T"H=i6ZA"d&h8#DlR^)u$N0q4Sg.!jRAlPa&>+kAUquFroW?KE9B"m'Uda^h@d-ori?#/LS($UWQ+*E4:e.(e[23`H_fPd1Hjm3U/b*3h>B=N+@4,oUFN:hP?#9[_(MP>-c&R?&->*jn[lh;QdbM8qspJD$%HA8FY&tW\nU3QmcHJJ`A(]9Ba-8t17N(]RT\C)kFkOTWS0]^H#L^A1^;@_e05o7SQ!kKX&'nOYE6,*K8(sf/gPdm;q^"?^?rVMbQIr6So3;hVo:^h=S0hd1QdalaRM67E:n8cO7_7b96N++5\_5PsZ.Ok`28XO^*.=`4:4s#4Fe%FZ\6cd%[WYhLB2?OSSqF5NhQ68J%K4k9%)2^OQ3u7XsIYcR"(TlL!cYTS%mdl>GD\,HDHZ0UF/-Q,On4THr=fOO4YDbq=$W7#0iKaqXD]#1\GsCF(nn%7SE%X;6NpI88"LU8Umi@034U;'_M;.l6]VE~> endstream endobj --- 185,192 ---- endobj 34 0 obj ! << /Length 2665 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gb"/)9691&&\dR4bUo"$M^;[TiMmm1fuS/ro%MAgq%0B%S/I:(h&0*63@jR5:Qkd7"pK$:EGfd`@F6\!"3j48YXe\`,--1Htu.-m:(_FR-tlf79&f87"?]h+EZIJn",4n7@Ql$6ud[o72%s8NJYf!U,!O<]9GRTor1%9Yfm64/g]//k`"%kO>M3dTfRg97J_^@b-81*\QYQrB0iQ,jY=!;k0D,nG&'$F#;02rjURmQcqpgXjEbnlQ;DjYR-HfC,'MV&<,]:p;N$0>#V\]e'`KdfI29cL[XNma4rEIS]<+e[@!oC>fP@$O=uqDG+fm&"]4.KSNr>:=1]4P/6_m%'">k":M=U^RWp_QPe^FV`MYV[M&.@%g&W/j_C2$=5l0?@_E.%r1$e@TP2hq"^*>B6<&PVOY!=P@9inmXCt[Q#7]r'3Ak+VEntWU3#I2a);+3c9$Qo(ilOl*`Q8*JOrUR!7.HgtdAV6J7iAi47"NZWV@HHl>pqhaP#k'ZYYTDmAUn'Ei;+_=G! HTtBjO@u/XCL'C*X1og.X9--B$)/.-[&\1<<9MS;+PLUdG:t,-\dGh8<+X&*7h7O^'d?b0b;OYVa=Hq!5f)F67!!])]^WMF0iE5k5Nr]Llj/)>P_f#;*1.\c.>8!cB#)'^=s,9@HcL&'BH]i-jg%Y_s*6b3]Y+pUAT?+,31C+\9\W35j[SHek:/1^*j*Xpf=RR#6)OTQ1TG0Oc(EbRF/[Q4C!k8a5F6gN7[^+D0Uib>7"#e8AGa8J@!-/:G?S+2-O=Mf"_KOPNPj,?q3pa!YcZRioZDH(_QU!9MK:*"Hj%K]fe1A:T]MG]WFkfteI!YgX?]STrNT[22]tgVTf`P5PiJO[TVAOV1VeXH1Y7V!R*HY@aSi(pO<1c8b-C2IsBK2Ic?:3r2c*]5f&'oU#lONBE\K-T[n5qW^8NHEqWP(mAe),@um4b:]:!KpGHC-8(+TkB'89.+N::S/ui%a^H4:A#.6>k:d2tC2uitjQPN2ODo.&N4SN!cVN"7'Rq$:La-djk4O1$9P=\#Q[K0-Npt;jocEG9#_N7EhK7S:kAROZnTU6*^!#&ig-MZGSYqpCf[]Ma[&Hb%P"r=@W1WsW`39[Vg1;(TUP&qV[5+CQiLf"]'c\!%&ZAD6p]26HofVS$VOq>6-ecj\0*cr"XS/1`)n-aJ91l!D%7C?LCPD!"q_,R4qZsqrA#2i=k?A\@mc0_c4#6%oU,IK!Dk%*>QsXX3rm,!s8;pG0`)do5dMNFC&mnSUK7tV..\;NpAp?d$h^1fs)7skO8kXL&=/e)!7Aa&j8\cP#jZri!!itP5u]J7(^a5:k!,/S*^`dnG`lR-kbYk$r0%[X"dXAI0HV:e@/i^kAE`QMjU%@Z=fT@EZgc'J#X0,\]gTba`(>U!IpQL\Hh_reXFH3ccMKgP897o-=Llh[rRF\Fn(%b@WZJZ_!\S$W1?I endstream endobj *************** *** 200,207 **** endobj 36 0 obj ! << /Length 2695 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gatm=D3*_c&cTMZ69kpK[oft_J(Ys"i0nPPifZrS#4=ia(pm"aR?^14?K/Kno,WsX30\"A(+95h3+Hu@31QCL7f-V:pZJHqnQb'7X2CLo*:H#1L&X9Uo/gRDq8>pr@uHa9)Q^'Ci;;?[Y,KlAiilLNRb9c=P4gh[W=Sh]#]dd]UYBm-#X_iC"0NW)d'ZQ[K"fWqM8$lN#j?.7etZ[1>HEAlIZ?MqIMJ*7q2p.,D6r#;^#OVu/qo'4G7`7ab"JQ8f,Z.^n`M\EQ&.I.DE,$qBeG-'=.6F]-%-?!^OV/;UB0Lb3tHX.<^h%U79l&*H%*lJV86]'cr/kr9s0cRR88(g_.[5OmX':&GP50Q[4Rp$]'V-\Uos%[`\dkY,C`eLS>STr`3,FnOap_>LTZP)JuXfbL)AciAVc=flW?Url(?^uQY'=A+nK6qeIAYCEippQJT^P+'n_qIKMe%jOJ2m#1+pFP5lndjC$:KIQmP7YFsD7t3@4ZI^kr'[*)6W.9#<-fm/=`=j!15P&$1/+1oN-eFrj4l+k!X/9liRrguUuRlJD`QIdBD>?l0=lL,-bfoTIr0JV[hWh>)3ja+PQZO`X@ifGH$8fLqmkc\!'k#ZjIm3?Z/H)N#"8RuN(sGT^4UK4=[Lp5]#.iD?3kDZlU)]gg_]M7k-qaW#-Gc6DWqG57!A0cAYp,)Q__dY@1n[C8I75cJLt1e%a+HK'FK$$TQg](@@RP*UTi7N[A*FSR"X;&1qN,A%>$PbroaJKrWa\,459@q]/3/a+apAPBEJ#DF@=^%)eRbO3jQp>8=3`:V*K-KL'bPD`;]F0$cukHCniaq_HEgf:2gYN;h0XSMc0OID#X]5M9)i6$"^KmJ0,@,GZ8?Y:.!N:]2lhr453.$T'=ffE&2!W^'?A=lph2[>Ca^VWcf(V\r*3@fhYV1Nk)kOSq^c?9oT=K7A4VYP6B]?;Ws^8DJP6gMH!s1e642L?6<;VSQ:Ad;R8KiZQUf3I2!GIg,K_%ejGq`dDH*md^ha#((fj-&d'W@n-2;Qi/KCq,7S/YNJ*k$^4te6L/eoH,][n;(ll>>ma)\EpDS[78t6W*9o6fJRV(s;a%9!6agNo8%`FI$"d6Yr$j$J\]hrG@3&[Aj$hctAiE5%tnGn! )(=uaf",R\ZoRh3'k"5(I/&5G:Q1p,\P8Z0X;+)<"Y]pO8.+1GA5OqQ3FNrT.6>m#Fj:^2iQV:8?/oY>_j2c6UrN&9r_?*/C]>9;Q`/s30kr^9m]YShYrCB]JekY^a<"!BmDFu&&3U$-ok\llg9lH%7?FMY;K/*cnjKQq(Bn7_H0((>[Gpu.>)@h5hJUO=BL#-tA.rIBJ#:>q#2n3Jq^1?F"@]?6r:!N]t%0#r`2Vp8;,J0VHNhX!B+@6RRTqGNo>ojE@;-?mUV#kqb$5`s+m+R>\BL!]bj_U#ndlG.g.u$,Nki5CD\fJ&YsVHLQCpC3VXZ8_nVcFl:X:6+$[KCq;c2jsmoZ7&'[[e-W_DD[*\QQ%B7aQP53!Kk1jQ-ORbZ]utI2TIm%ZiIE-S%rV;u?4BO,cC4#H$:elj_:$ZnLrQ2rDgPuu1*\m[bhtNr6rNLME`T6CH.Ks_RfV<>;>;[pQ)osX6HfZIR`,F8]#T?n#\b:5XArW44)?)Ai[/~> endstream endobj --- 200,207 ---- endobj 36 0 obj ! << /Length 2612 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gatm=D3#XF&cR6o@Y#,,=S%brg=pXKpmN%B/7\RkYmm:jW,4]:jr2H\^beQX8?cg9s[Ys1;#e?h'$Wpf0Bf)*^=r5UfKIPAUdERE@TU1F%1#\M=^[miYfo;mSl5;`8O@Wg;^`Os3/e':LYfs54496*ci<8CA_j7:CZ'P`OhQ0O0Y:o7;Bg=QAbY;?c:n.Pc9\K\eierY>lB2p+ZGNX-m,Ai;aTf0k[d8QW?g[-Kk3Y0!$0#l%[*-S/:&o6K%JH>IG5X=_n0^Jd0Qad[mi(uaVe,fC.a:_LJh_q*+pPhbja&d).$KtL6pKD_eZP6%POrO7Z*LCdHP:jG`>#:m9G]LV3,R+JB>d@+tTe[%a+[rN4;m0CfZMonpb)S&&i[M<[]`+_kK3J(6T`;Rc-%BZS?d4P?0ZZg"=iQ2:&-K6(GMg^]?Nrrk=t=fVW([UA))l%Nnf[-IZ5S*+%bjNaip5`eMgh&sEC(9[)ZSg7fYguuhmY?[[#! 6':l6?L]OLX&h@!o+J2;1>gP#,?V:5$3$&8h1Pa<:m.ug`.',]7bDsdMKmN@*k&'n;GH?N]80X0mIs6EN/^40RD]Ju\G4=0jc?M:bUQ]O2?J*X2d3(li=PPe4r_AaG>X^.Acg)tmFP@st&$(.ds3$h_-iic*hd@YV7$Lg.L_a#C"j_Ms#eRGr'B6FM(g@sn+gR%eCPXFsGb5YfPKu(>tS1`#@;WP*T6,2HF8W+B'e%ituZ*umAnTm]N>m8M/UX2h[^H#'!_!U/]0X+>#.kY5e5GO0!r#.T^4`_&-S,1HDBVV`62"H(X]6/,J&m!'2m=MB@kr-q&nUSO\^I-Juc%TI@6CG]POJiJQalq^*GpT5mUdV6!A)/-rc9e;W&bga"7.uq[h[VQ0Nks14&5p-R%^`Xf)djoi)ndC)g8b>B^M^%(T78`.&icEH"+hBa>%56FmMOnY'OikO+)OW0J7N$ice/"\7*r9]RA;n5NOr=Ra@?DKGI/[WNj=p13VGA?HL8%4F,#I^Tj/,`u>hXenAWp&B\mbm3h-lUSE#DV2=qg[u?&8>VM&m6=1D\c9,7H@@:Ujl^!HZ%J3kbZaj! m/?U=,WodT!)At0,3o"YAs&dR%2,1!#J5@#(QgWJ5\b7cucfS>"3()d?7+4KBU)nVe(\rUU+s5&t2R241bP/P9[H-a@I@XLA$YLl^slC:jU3BWk&fAn>j5gq%];J9n)N2T2='Fk"?8s:H6F9'"B^c%6CdF92f5V@reOFU0bH8+NK/nglPl,o^fiDc,T9]2LuoU\2L=CQ]$Csj+D1JUK\8t>_K0E`]6W1UJ`W+G.X>R>:Bf$(7'ut:r\#7ViK&AA?X,gAS@,NZ.n6%^c+3$5fX)BIq)dM.*>'G*eUR:d1SU(7_eneS!COjisuUgDjZ_N\D3WD[^FCAGf'MO"o9q5Jhb><0rE;S0kPEbIkjDrX1lr8>8-*ZY];BWcq.lFB[mo\(FR@9?;;(kVHEp9jjt?_c2akni@*_Mr4e+-Fjr'9VKf,](r;HT7o*].9fb6[FAGC'Kn!uO2@hLd\0\r/q@>d]F@VmMLG5_m4Z:`[~> endstream endobj *************** *** 215,222 **** endobj 38 0 obj ! << /Length 1672 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gb!;dD/\/e&H;*)+_3$6%l#SsU0]T#=P^VH7FPk,OaO)8K99l'XXnd]S2;2Yha`NdGd?F=`J.eg^>,9>]XR'akD[EoQY3#RfZ:M@o:BeNHB)R;5K@eL!O0H@\W!.QQ7FNS.sLAD[Ki-V#hE?;'HtD.o6Z%.d6$%fW\TEpmDbD(d\L>dO92T,QrC$gYdHB3#8Ho3^b"'h%.3Hj"TL_=l>h!s0-!O;W)jEq/;1it;1(D%DPo^b*GS4rpE(qZO4>ib]bdEGcS=gA04bJfWg%l()7(t+EfQ[n(12WgsLJuTnrIaJOc8.J,>/&Xk4?8s4&AHh0)/C]ROXYC4cOUrnj*=Y3-u*5;Yr;l63ep8RJ&$$bIem8?o&BqE@sF`"*E]H[6t*@NcO:>MVM$7qoh_aO31=*$-F9hU1\l,fWJdHBbcj%=IiKpAOHUHpZj,XXP.W(qP7A;Ocd@h)*EC`aQimZjo3kCqi^%jP"-b,2hi*&V2Wqb9^A5XE2O4%Y+;[_C+#m/_iqej)'!s5W:mt8Hb(QVBq&$/?a4A2Pi4mp<`X^d'B&"ZY31#suCqP%j4g@%HUb<;Z\Y@Yk>h^$Q.@4L5j*?"EQ`j75Z!o?uZ[8Ki32;G7X4Q%nMH+6T%'>RiRRr_m8C`AD;i>g19oWc7Xcj2a`kkhPrr+Sc(\1=g:&oCWVAQ;bk/->/W1VD;5(@nEUh=3%0*n2H'Tluka?En]J)Y(%N:a.%!F,:9m=iEh].E=;RQ.##h4H16T/?&XF[#++oJ^CJY-OEL2=b'b:<9e$5NIqpBp\j@C?gdY&>QB$/0C5?Df5*=8ghf;/NX$ZV?:;gsBoqdlj8,H7BjK"`=CW9bb%XA,t$G35H.>+K99B*VY"7s7oNDgK-VaW*0Q9$aud-DU!MmpI=2_3l\2u4NhpNjS3j2^d5*+YIi.P"SeuPEQ(lGI_>Jq45:+Jk]9(hEli5NNB_N2XYtOsXOG*?_CC#+ endstream endobj --- 215,222 ---- endobj 38 0 obj ! << /Length 1551 /Filter [ /ASCII85Decode /FlateDecode ] >> stream ! Gb!;dD/\/e&H;*)+_3%a$o,pA;(ik$TO*d>7FQFm^?="!9OeQ1JFoc?NMDNgu4:9E!hcR\)\E`'B3,<^[sE&q/c?khB>eB.)"pSu$M5dH`3OCZ,`3%):Q&4?,NF5!"nZ3c$I2\//TccoUO2]SMGmFLpV`iF+i33nDm,UFP]f:TFn9B<=MXL&hKeBQ(E5b[`K8K[7qU'$=td+1h/GSNW#6m-gnET.J;W;kE514m:!Ta)eL=*aBV/PQ4dUqeuEOKE*Y^+uTM:/iV;N6=`OeHC=AHR4s7W@P&4tI+$*l`c/QD8@Mj"\Oj;)4Jl<-fOumgZ2cuW_?:";Nqs]3a,P+($)?::;-L37)5:Fb6@:]^1*Z\(aULh;s%&/ufcU>_Ik.#!J1irb!4gQmp%Z?8`$(RC$iiCI@b.\Xt;Q%:h1iNIm4L'\r*U5K`J3r;DO^A(AgFq'#!@:ITQ!m)Pqq!dZ_V841c7m.Z5IS\sCDq6!kV&>gV=YWQO[$[\!cLR#XG+gMor`>;j%U8oCs.r:jDb):,Iq+X>6im)o9i;U]q-CkV15j`X:T^VJ?IuWZ]W"JD"eG1RV*uZMWuSB"IS<,e=00gO>:`l]NG/QPKjN*YWnk/#l@LH.B8O!]D5ACnXRA)glkgqm$^'ZnkZ/23K-3S#:'5/?YG9n.lWc*H930%+46!o1$CUR^#&a,)^t%'f2N2T?;+6c.:qRN?nGOc`EJXaOn_oH6?Imb`rq-Ag7:&P5e86AV2kP,58*qc2-'=Q.ifM*T/+E!n@>I^14&H5T&,pJ9ITRX+4Ef/=Cjt8+f>)IhqQe)2Y'cQH,_Gm8EM_aJ/;C@;)0"nfY>"f#sC(RHFb6VSAQBNIj87/\UAOR2b@KDmSYA++'-_%kt;+?In2l>@#?pCg5Rej_>*IrcEs-=389?o)6>QV"Kpuk!OmC.[#PdRAl,e\$jp^;6&B*b[$j9hC0E*@\f$b)_MI@c8FO,R5R?+)rj^'* endstream endobj *************** *** 229,233 **** >> endobj ! 40 0 obj << /Type /Font /Subtype /Type1 --- 229,319 ---- >> endobj ! 42 0 obj ! << ! /Title (\376\377\0\120\0\157\0\160\0\165\0\154\0\141\0\164\0\151\0\157\0\156\0\40\0\107\0\145\0\156\0\145\0\164\0\151\0\143\0\163\0\40\0\151\0\156\0\40\0\102\0\151\0\157\0\120\0\145\0\162\0\154\0\40\0\110\0\117\0\127\0\124\0\117) ! /Parent 40 0 R ! /Next 44 0 R ! /A 41 0 R ! >> endobj ! 44 0 obj ! << ! /Title (\376\377\0\124\0\141\0\142\0\154\0\145\0\40\0\157\0\146\0\40\0\103\0\157\0\156\0\164\0\145\0\156\0\164\0\163) ! /Parent 40 0 R ! /Prev 42 0 R ! /Next 45 0 R ! /A 43 0 R ! >> endobj ! 45 0 obj ! << ! /Title (\376\377\0\111\0\156\0\164\0\162\0\157\0\144\0\165\0\143\0\164\0\151\0\157\0\156) ! /Parent 40 0 R ! /Prev 44 0 R ! /Next 46 0 R ! /A 9 0 R ! >> endobj ! 46 0 obj ! << ! /Title (\376\377\0\124\0\150\0\145\0\40\0\102\0\151\0\157\0\72\0\72\0\120\0\157\0\160\0\107\0\145\0\156\0\40\0\117\0\142\0\152\0\145\0\143\0\164\0\163) ! /Parent 40 0 R ! /Prev 45 0 R ! /Next 47 0 R ! /A 11 0 R ! >> endobj ! 47 0 obj ! << ! /Title (\376\377\0\102\0\165\0\151\0\154\0\144\0\151\0\156\0\147\0\40\0\120\0\157\0\160\0\165\0\154\0\141\0\164\0\151\0\157\0\156\0\163) ! /Parent 40 0 R ! /Prev 46 0 R ! /Next 48 0 R ! /A 13 0 R ! >> endobj ! 48 0 obj ! << ! /Title (\376\377\0\122\0\145\0\141\0\144\0\151\0\156\0\147\0\40\0\141\0\156\0\144\0\40\0\127\0\162\0\151\0\164\0\151\0\156\0\147\0\40\0\120\0\157\0\160\0\165\0\154\0\141\0\164\0\151\0\157\0\156\0\40\0\144\0\141\0\164\0\141\0\40\0\167\0\151\0\164\0\150\0\40\0\102\0\151\0\157\0\72\0\72\0\120\0\157\0\160\0\107\0\145\0\156\0\72\0\72\0\111\0\117) ! /Parent 40 0 R ! /Prev 47 0 R ! /Next 49 0 R ! /A 15 0 R ! >> endobj ! 49 0 obj ! << ! /Title (\376\377\0\101\0\154\0\154\0\145\0\154\0\145\0\40\0\144\0\141\0\164\0\141\0\40\0\146\0\162\0\157\0\155\0\40\0\101\0\154\0\151\0\147\0\156\0\155\0\145\0\156\0\164\0\163\0\40\0\165\0\163\0\151\0\156\0\147\0\40\0\102\0\151\0\157\0\72\0\72\0\101\0\154\0\151\0\147\0\156\0\111\0\117\0\40\0\141\0\156\0\144\0\40\0\102\0\151\0\157\0\72\0\72\0\120\0\157\0\160\0\107\0\145\0\156\0\72\0\72\0\125\0\164\0\151\0\154\0\151\0\164\0\151\0\145\0\163) ! /Parent 40 0 R ! /Prev 48 0 R ! /Next 50 0 R ! /A 17 0 R ! >> endobj ! 50 0 obj ! << ! /Title (\376\377\0\123\0\165\0\155\0\155\0\141\0\162\0\171\0\40\0\123\0\164\0\141\0\164\0\151\0\163\0\164\0\151\0\143\0\163\0\40\0\167\0\151\0\164\0\150\0\40\0\102\0\151\0\157\0\72\0\72\0\120\0\157\0\160\0\107\0\145\0\156\0\72\0\72\0\123\0\164\0\141\0\164\0\151\0\163\0\164\0\151\0\143\0\163) ! /Parent 40 0 R ! /Prev 49 0 R ! /Next 51 0 R ! /A 19 0 R ! >> endobj ! 51 0 obj ! << ! /Title (\376\377\0\120\0\157\0\160\0\165\0\154\0\141\0\164\0\151\0\157\0\156\0\40\0\123\0\164\0\141\0\164\0\151\0\163\0\164\0\151\0\143\0\163\0\40\0\165\0\163\0\151\0\156\0\147\0\40\0\102\0\151\0\157\0\72\0\72\0\120\0\157\0\160\0\107\0\145\0\156\0\72\0\72\0\120\0\157\0\160\0\123\0\164\0\141\0\164\0\163) ! /Parent 40 0 R ! /Prev 50 0 R ! /Next 52 0 R ! /A 21 0 R ! >> endobj ! 52 0 obj ! << ! /Title (\376\377\0\103\0\157\0\141\0\154\0\145\0\163\0\143\0\145\0\156\0\164\0\40\0\123\0\151\0\155\0\165\0\154\0\141\0\164\0\151\0\157\0\156\0\163) ! /Parent 40 0 R ! /Prev 51 0 R ! /Next 53 0 R ! /A 23 0 R ! >> endobj ! 53 0 obj ! << ! /Title (\376\377\0\102\0\151\0\142\0\154\0\151\0\157\0\147\0\162\0\141\0\160\0\150\0\171) ! /Parent 40 0 R ! /Prev 52 0 R ! /A 25 0 R ! >> endobj ! 54 0 obj << /Type /Font /Subtype /Type1 *************** *** 236,240 **** /Encoding /WinAnsiEncoding >> endobj ! 41 0 obj << /Type /Font /Subtype /Type1 --- 322,326 ---- /Encoding /WinAnsiEncoding >> endobj ! 55 0 obj << /Type /Font /Subtype /Type1 *************** *** 243,247 **** /Encoding /WinAnsiEncoding >> endobj ! 42 0 obj << /Type /Font /Subtype /Type1 --- 329,333 ---- /Encoding /WinAnsiEncoding >> endobj ! 56 0 obj << /Type /Font /Subtype /Type1 *************** *** 250,254 **** /Encoding /WinAnsiEncoding >> endobj ! 43 0 obj << /Type /Font /Subtype /Type1 --- 336,340 ---- /Encoding /WinAnsiEncoding >> endobj ! 57 0 obj << /Type /Font /Subtype /Type1 *************** *** 257,261 **** /Encoding /WinAnsiEncoding >> endobj ! 44 0 obj << /Type /Font /Subtype /Type1 --- 343,347 ---- /Encoding /WinAnsiEncoding >> endobj ! 58 0 obj << /Type /Font /Subtype /Type1 *************** *** 264,268 **** /Encoding /WinAnsiEncoding >> endobj ! 45 0 obj << /Type /Font /Subtype /Type1 --- 350,354 ---- /Encoding /WinAnsiEncoding >> endobj ! 59 0 obj << /Type /Font /Subtype /Type1 *************** *** 279,287 **** << /Type /Catalog /Pages 1 0 R >> endobj 3 0 obj << ! /Font << /F3 40 0 R /F5 41 0 R /F1 43 0 R /F6 42 0 R /F9 45 0 R /F11 44 0 R >> /ProcSet [ /PDF /ImageC /Text ] >> endobj --- 365,375 ---- << /Type /Catalog /Pages 1 0 R + /Outlines 40 0 R + /PageMode /UseOutlines >> endobj 3 0 obj << ! /Font << /F3 54 0 R /F5 55 0 R /F1 57 0 R /F6 56 0 R /F9 59 0 R /F11 58 0 R >> /ProcSet [ /PDF /ImageC /Text ] >> endobj *************** *** 289,293 **** << /S /GoTo ! /D [6 0 R /XYZ 67.0 348.662 null] >> endobj --- 377,381 ---- << /S /GoTo ! /D [6 0 R /XYZ 67.0 342.412 null] >> endobj *************** *** 295,299 **** << /S /GoTo ! /D [6 0 R /XYZ 67.0 164.337 null] >> endobj --- 383,387 ---- << /S /GoTo ! /D [6 0 R /XYZ 67.0 158.087 null] >> endobj *************** *** 307,311 **** << /S /GoTo ! /D [29 0 R /XYZ 67.0 230.66 null] >> endobj --- 395,399 ---- << /S /GoTo ! /D [29 0 R /XYZ 67.0 240.66 null] >> endobj *************** *** 313,317 **** << /S /GoTo ! /D [31 0 R /XYZ 67.0 444.98 null] >> endobj --- 401,405 ---- << /S /GoTo ! /D [31 0 R /XYZ 67.0 504.7 null] >> endobj *************** *** 319,323 **** << /S /GoTo ! /D [33 0 R /XYZ 67.0 562.26 null] >> endobj --- 407,411 ---- << /S /GoTo ! /D [33 0 R /XYZ 67.0 612.7 null] >> endobj *************** *** 325,329 **** << /S /GoTo ! /D [37 0 R /XYZ 67.0 553.0 null] >> endobj --- 413,417 ---- << /S /GoTo ! /D [37 0 R /XYZ 67.0 596.0 null] >> endobj *************** *** 331,335 **** << /S /GoTo ! /D [37 0 R /XYZ 67.0 376.47 null] >> endobj --- 419,423 ---- << /S /GoTo ! /D [37 0 R /XYZ 67.0 419.47 null] >> endobj *************** *** 337,398 **** << /S /GoTo ! /D [39 0 R /XYZ 67.0 413.92 null] >> endobj xref ! 0 46 0000000000 65535 f ! 0000023265 00000 n ! 0000023372 00000 n ! 0000023422 00000 n 0000000015 00000 n 0000000071 00000 n ! 0000002896 00000 n ! 0000003016 00000 n ! 0000003097 00000 n ! 0000023557 00000 n ! 0000003231 00000 n ! 0000023621 00000 n ! 0000003366 00000 n ! 0000023686 00000 n ! 0000003502 00000 n ! 0000023750 00000 n ! 0000003637 00000 n ! 0000023815 00000 n ! 0000003773 00000 n ! 0000023880 00000 n ! 0000003909 00000 n ! 0000023945 00000 n ! 0000004045 00000 n ! 0000024009 00000 n ! 0000004181 00000 n ! 0000024074 00000 n ! 0000004317 00000 n ! 0000007068 00000 n ! 0000007176 00000 n ! 0000009741 00000 n ! 0000009849 00000 n ! 0000012785 00000 n ! 0000012893 00000 n ! 0000014954 00000 n ! 0000015062 00000 n ! 0000017728 00000 n ! 0000017836 00000 n ! 0000020624 00000 n ! 0000020732 00000 n ! 0000022497 00000 n ! 0000022605 00000 n ! 0000022718 00000 n ! 0000022828 00000 n ! 0000022939 00000 n ! 0000023047 00000 n ! 0000023159 00000 n trailer << ! /Size 46 /Root 2 0 R /Info 4 0 R >> startxref ! 24139 %%EOF --- 425,517 ---- << /S /GoTo ! /D [39 0 R /XYZ 67.0 463.22 null] ! >> ! endobj ! 40 0 obj ! << ! /First 42 0 R ! /Last 53 0 R ! >> endobj ! 41 0 obj ! << ! /S /GoTo ! /D [6 0 R /XYZ 67.0 725.0 null] ! >> ! endobj ! 43 0 obj ! << ! /S /GoTo ! /D [6 0 R /XYZ 67.0 505.411 null] >> endobj xref ! 0 60 0000000000 65535 f ! 0000026376 00000 n ! 0000026483 00000 n ! 0000026575 00000 n 0000000015 00000 n 0000000071 00000 n ! 0000002808 00000 n ! 0000002928 00000 n ! 0000003009 00000 n ! 0000026710 00000 n ! 0000003143 00000 n ! 0000026774 00000 n ! 0000003278 00000 n ! 0000026839 00000 n ! 0000003414 00000 n ! 0000026903 00000 n ! 0000003549 00000 n ! 0000026968 00000 n ! 0000003685 00000 n ! 0000027032 00000 n ! 0000003821 00000 n ! 0000027096 00000 n ! 0000003957 00000 n ! 0000027160 00000 n ! 0000004093 00000 n ! 0000027225 00000 n ! 0000004229 00000 n ! 0000006889 00000 n ! 0000006997 00000 n ! 0000009658 00000 n ! 0000009766 00000 n ! 0000012891 00000 n ! 0000012999 00000 n ! 0000014997 00000 n ! 0000015105 00000 n ! 0000017863 00000 n ! 0000017971 00000 n ! 0000020676 00000 n ! 0000020784 00000 n ! 0000022428 00000 n ! 0000027290 00000 n ! 0000027341 00000 n ! 0000022536 00000 n ! 0000027404 00000 n ! 0000022830 00000 n ! 0000023026 00000 n ! 0000023193 00000 n ! 0000023423 00000 n ! 0000023638 00000 n ! 0000024060 00000 n ! 0000024581 00000 n ! 0000024952 00000 n ! 0000025335 00000 n ! 0000025562 00000 n ! 0000025716 00000 n ! 0000025829 00000 n ! 0000025939 00000 n ! 0000026050 00000 n ! 0000026158 00000 n ! 0000026270 00000 n trailer << ! /Size 60 /Root 2 0 R /Info 4 0 R >> startxref ! 27469 %%EOF From Consultants9 at cgt-consult.com Tue Mar 8 17:35:20 2005 From: Consultants9 at cgt-consult.com (Consultants) Date: Tue Mar 8 18:07:08 2005 Subject: [Bioperl-guts-l] Our IT Services Message-ID: Hi, I hope things are going well, at your end. How can I help with your current need for IT Consultants? CGT Consulting provides highly specialized contract consultants for immediate results. We maintain a base of deployable consultants in the areas of ERP, CRM, Wireless and Web-based technology, including .NET. In addition, CGT draws from an immense in-house database of over 1 Million outside candidates. We are committed to fast and effective technology services paired with a unique corporate philosophy of "Cost-Conscious Consulting". How can I be of service? Thank you. Naren Mistry Manager of Consulting Services CGT Consulting Inc. 18032-C Lemon Drive, Suite 350 Yorba Linda, CA 92886 Tel: (714) 572-1055 - 714-579-1248 Fax: (714) 364-9705 naren@cgt-consult.com www.cgt-consult.com Emailed to: bioperl-guts-l@bioperl.org Anti-SPAM Policy Disclaimer: mailto:Consultants9@cgt-consult.com?subject=Remove-IT-Services Under Bill s.1618 Title III passed by the 105th U. S. Congress, mail cannot be considered Spam as long as we include contact information and a remove link for removal from our mailing list. If this e-mail is unsolicited, please accept our apologies and click on the following removal link: mailto:Consultants9@cgt-consult.com?subject=Remove-IT-Services or reply back with REMOVE in the SUBJECT with this email address: bioperl-guts-l@bioperl.org From faga at pub.open-bio.org Tue Mar 8 22:05:33 2005 From: faga at pub.open-bio.org (Ben faga) Date: Tue Mar 8 21:51:05 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/DB/GFF/Adaptor/dbi mysqlcmap.pm, 1.2, 1.3 Message-ID: <200503090305.j2935XDT001655@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/DB/GFF/Adaptor/dbi In directory pub.open-bio.org:/tmp/cvs-serv1638/Bio/DB/GFF/Adaptor/dbi Modified Files: mysqlcmap.pm Log Message: Needed to overwrite another method to get the regular loader to work properly. Index: mysqlcmap.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/DB/GFF/Adaptor/dbi/mysqlcmap.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** mysqlcmap.pm 1 Mar 2005 22:22:33 -0000 1.2 --- mysqlcmap.pm 9 Mar 2005 03:05:30 -0000 1.3 *************** *** 669,673 **** PRIMARY KEY (table_name) ) TYPE=MyISAM; ! } # table }, --- 669,674 ---- PRIMARY KEY (table_name) ) TYPE=MyISAM; ! }, # table ! insert=>{next_num=>q[ insert into cmap_next_number (table_name,next_number) VALUES ('cmap_feature',82);]} }, *************** *** 753,761 **** } my $lookup_type = $dbh->prepare_delayed('SELECT ftypeid FROM ftype WHERE fmethod=? AND fsource=?'); my $insert_type = $dbh->prepare_delayed('INSERT INTO ftype (fmethod,fsource) VALUES (?,?)'); my $lookup_group = $dbh->prepare_delayed('SELECT feature_id FROM cmap_feature WHERE feature_name=? AND gclass=?'); ! my $insert_group = $dbh->prepare_delayed(' insert into cmap_feature (feature_id, feature_name, gclass ) select next_number , ?,? from cmap_next_number where table_name=\'cmap_feature\';update cmap_next_number set next_number = next_number +1 where table_name=\'cmap_feature\''); my $lookup_attribute = $dbh->prepare_delayed('SELECT fattribute_id FROM fattribute WHERE fattribute_name=?'); --- 754,765 ---- } + #xx1 my $lookup_type = $dbh->prepare_delayed('SELECT ftypeid FROM ftype WHERE fmethod=? AND fsource=?'); my $insert_type = $dbh->prepare_delayed('INSERT INTO ftype (fmethod,fsource) VALUES (?,?)'); my $lookup_group = $dbh->prepare_delayed('SELECT feature_id FROM cmap_feature WHERE feature_name=? AND gclass=?'); ! my $insert_group = $dbh->prepare_delayed(' INSERT into cmap_feature (feature_id, accession_id,feature_name, gclass ) VALUES (?,feature_id,?,?)'); ! my $aux_insert_group = $dbh->prepare_delayed(' update cmap_next_number set next_number = next_number +1 where table_name=\'cmap_feature\''); ! my $next_id_group = $dbh->prepare_delayed('select next_number from cmap_next_number where table_name=\'cmap_feature\''); my $lookup_attribute = $dbh->prepare_delayed('SELECT fattribute_id FROM fattribute WHERE fattribute_name=?'); *************** *** 773,778 **** $self->{load_stuff}{sth}{lookup_ftype} = $lookup_type; $self->{load_stuff}{sth}{insert_ftype} = $insert_type; ! $self->{load_stuff}{sth}{lookup_fgroup} = $lookup_group; ! $self->{load_stuff}{sth}{insert_fgroup} = $insert_group; $self->{load_stuff}{sth}{insert_fdata} = $insert_data; $self->{load_stuff}{sth}{lookup_fattribute} = $lookup_attribute; --- 777,786 ---- $self->{load_stuff}{sth}{lookup_ftype} = $lookup_type; $self->{load_stuff}{sth}{insert_ftype} = $insert_type; ! #$self->{load_stuff}{sth}{lookup_fgroup} = $lookup_group; ! #$self->{load_stuff}{sth}{insert_fgroup} = $insert_group; ! $self->{load_stuff}{sth}{lookup_cmap_feature} = $lookup_group; ! $self->{load_stuff}{sth}{insert_cmap_feature} = $insert_group; ! $self->{load_stuff}{sth}{aux_insert_cmap_feature} = $aux_insert_group; ! $self->{load_stuff}{sth}{next_id_cmap_feature} = $next_id_group; $self->{load_stuff}{sth}{insert_fdata} = $insert_data; $self->{load_stuff}{sth}{lookup_fattribute} = $lookup_attribute; *************** *** 887,890 **** --- 895,974 ---- return $fid; } + + =head2 get_table_id + + Title : get_table_id + Usage : $integer = $db->get_table_id($table,@ids) + Function: get the ID of a group or type + Returns : an integer ID or undef + Args : none + Status : private + + This internal method is called by load_gff_line to look up the integer + ID of an existing feature type or group. The arguments are the name + of the table, and two string identifiers. For feature types, the + identifiers are the method and source. For groups, the identifiers + are group name and class. + + This method requires that a statement handler named I, + have been created previously by setup_load(). It is here to overcome + deficiencies in mysql's INSERT syntax. + + =cut + + #' + # get the object ID from a named table + sub get_table_id { + my $self = shift; + my $table = shift; + my @ids = @_; + + # irritating warning for null id + my $id_key; + { + local $^W=0; + $id_key = join ':',@ids; + } + + my $s = $self->{load_stuff}; + my $sth = $s->{sth}; + my $dbh = $self->features_db; + + unless (defined($s->{$table}{$id_key})) { + + ######################################### + # retrieval of the last inserted id is now located at the adaptor and not in caching_handle + ####################################### + if ( (my $result = $sth->{"lookup_$table"}->execute(@ids)) > 0) { + $s->{$table}{$id_key} = ($sth->{"lookup_$table"}->fetchrow_array)[0]; + } else { + if (defined($sth->{"next_id_$table"})){ + + $sth->{"insert_$table"}->execute(3,'string1','string2'); + # Can't use auto incrementing + $sth->{"next_id_$table"}->execute(); + $s->{$table}{$id_key} = ($sth->{"next_id_$table"}->fetchrow_array)[0]; + if ($s->{$table}{$id_key}){ + $sth->{"insert_$table"}->execute($s->{$table}{$id_key},@ids); + $sth->{"aux_insert_$table"}->execute() if $sth->{"aux_insert_$table"}; + } + } + else{ + $sth->{"insert_$table"}->execute(@ids); + $s->{$table}{$id_key} = $self->insertid($sth->{"insert_$table"}) unless $s->{$table}{$id_key}; + $sth->{"aux_insert_$table"}->execute() if $sth->{"aux_insert_$table"}; + } + } + } + + my $id = $s->{$table}{$id_key}; + unless (defined $id) { + warn "No $table id for $id_key ",$dbh->errstr," Record skipped.\n"; + return; + } + $id; + } + + #----------------------------------- From faga at pub.open-bio.org Wed Mar 9 14:06:44 2005 From: faga at pub.open-bio.org (Ben faga) Date: Wed Mar 9 13:52:07 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts/Bio-DB-GFF bulk_load_gff.PLS, 1.25, 1.26 Message-ID: <200503091906.j29J6iDT004267@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF In directory pub.open-bio.org:/tmp/cvs-serv4247 Modified Files: bulk_load_gff.PLS Log Message: Added much functionallity. This now can use both the mysql and mysqlcmap adaptors. It also can be a replacement for pg_bulk_load_gff.PLS. When called as *pg_bulk_gff.pl it will function the same as pg_bulk_load_gff.pl Index: bulk_load_gff.PLS =================================================================== RCS file: /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF/bulk_load_gff.PLS,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** bulk_load_gff.PLS 2 Oct 2004 15:11:04 -0000 1.25 --- bulk_load_gff.PLS 9 Mar 2005 19:06:42 -0000 1.26 *************** *** 2,5 **** --- 2,6 ---- # $Id$ + use strict; # use lib './blib/lib'; *************** *** 9,14 **** use Bio::DB::GFF; use Bio::DB::GFF::Util::Binning 'bin'; - use Bio::DB::GFF::Adaptor::dbi::mysqlopt; - use constant MYSQL => 'mysql'; --- 10,13 ---- *************** *** 83,87 **** e.g. -d instead of --database. ! --database Mysql database name (default dbi:mysql:test) --create Reinitialize/create data tables without asking --user Username to log in as --- 82,87 ---- e.g. -d instead of --database. ! --database Database name (default dbi:mysql:test) ! --adaptor Adaptor name (default mysql) --create Reinitialize/create data tables without asking --user Username to log in as *************** *** 90,93 **** --- 90,94 ---- GFF and/or FASTA files --password Password to use for authentication + --maxbin Set the value of the maximum bin size --local Flag to indicate that the data source is local --maxfeature Set the value of the maximum feature size *************** *** 111,115 **** =cut ! package Bio::DB::GFF::Adaptor::faux; use Bio::DB::GFF::Adaptor::dbi::mysqlopt; --- 112,116 ---- =cut ! package Bio::DB::GFF::Adaptor::fauxmysql; use Bio::DB::GFF::Adaptor::dbi::mysqlopt; *************** *** 121,124 **** --- 122,176 ---- my ($id,$offset,$seq) = @_; print join("\t",$id,$offset,$seq),"\n"; + }; + + package Bio::DB::GFF::Adaptor::fauxmysqlcmap; + + use Bio::DB::GFF::Adaptor::dbi::mysqlcmap; + use vars '@ISA'; + @ISA = 'Bio::DB::GFF::Adaptor::dbi::mysqlcmap'; + + sub insert_sequence { + my $self = shift; + my ($id,$offset,$seq) = @_; + print join("\t",$id,$offset,$seq),"\n"; + }; + + package Bio::DB::GFF::Adaptor::fauxpg; + + use Bio::DB::GFF::Adaptor::dbi::pg; + use vars '@ISA'; + @ISA = 'Bio::DB::GFF::Adaptor::dbi::pg'; + + #these two subs are to separate the table creation from the + #index creation + sub do_initialize { + my $self = shift; + my $erase = shift; + $self->drop_all if $erase; + + my $dbh = $self->features_db; + my $schema = $self->schema; + foreach my $table_name ($self->tables) { + my $create_table_stmt = $schema->{$table_name}{table} ; + $dbh->do($create_table_stmt) || warn $dbh->errstr; + # $self->create_other_schema_objects(\%{$schema->{$table_name}}); + } + 1; + } + + sub _create_indexes_etc { + my $self = shift; + + my $dbh = $self->features_db; + my $schema = $self->schema; + foreach my $table_name ($self->tables) { + $self->create_other_schema_objects(\%{$schema->{$table_name}}); + } + } + + sub insert_sequence { + my $self = shift; + my ($id,$offset,$seq) = @_; + print "$id\t$offset\t$seq\n"; } *************** *** 133,150 **** } ! my ($DSN,$FORCE,$USER,$PASSWORD,$FASTA,$LOCAL,$MAX_BIN,$GROUP_TAG,$LONG_LIST); GetOptions ('database:s' => \$DSN, 'create' => \$FORCE, 'user:s' => \$USER, 'password:s' => \$PASSWORD, 'fasta:s' => \$FASTA, ! 'local' => \$LOCAL, ! 'maxbin|maxfeature:s' => \$MAX_BIN, 'group:s' => \$GROUP_TAG, 'long_list:s' => \$LONG_LIST ) or (system('pod2text', $0), exit -1); ! $DSN ||= 'dbi:mysql:test'; if ($bWINDOWS && not $FORCE) { --- 185,209 ---- } ! my ($DSN,$ADAPTOR,$FORCE,$USER,$PASSWORD,$FASTA,$LOCAL,$MAX_BIN,$GROUP_TAG,$LONG_LIST); GetOptions ('database:s' => \$DSN, + 'adaptor:s' => \$ADAPTOR, 'create' => \$FORCE, 'user:s' => \$USER, 'password:s' => \$PASSWORD, 'fasta:s' => \$FASTA, ! 'local' => \$LOCAL, ! 'maxbin|maxfeature:s' => \$MAX_BIN, 'group:s' => \$GROUP_TAG, 'long_list:s' => \$LONG_LIST ) or (system('pod2text', $0), exit -1); ! # If called as pg_bulk_load_gff.pl behave as that did. ! if ($0 =~/pg_bulk_load_gff.pl/){ ! $ADAPTOR ||= 'pg'; ! $DSN ||= 'test'; ! } ! $DSN ||= 'dbi:mysql:test'; ! if ($bWINDOWS && not $FORCE) { *************** *** 162,185 **** } my (@auth,$AUTH); if (defined $USER) { push @auth,(-user=>$USER); ! $AUTH .= " -u$USER"; } if (defined $PASSWORD) { push @auth,(-pass=>$PASSWORD); ! $AUTH .= " -p$PASSWORD"; } - $DSN=~s/database=//i; - $DSN=~s/;host=/:/i; #cater for dsn in the form of "dbi:mysql:database=$dbname;host=$host" - - my($DBI,$DBD,$DBNAME,$HOST)=split /:/,$DSN; if (defined $HOST) { $AUTH .= " -h$HOST"; } - $DBNAME=$DSN unless $DSN=~/:/; if (defined $DBNAME) { ! $AUTH .= " -D$DBNAME"; } if (defined $LOCAL) { --- 221,275 ---- } + $DSN=~s/database=//i; + $DSN=~s/;host=/:/i; #cater for dsn in the form of "dbi:mysql:database=$dbname;host=$host" + + + my($DBI,$DBD,$DBNAME,$HOST)=split /:/,$DSN; + $DBNAME=$DSN unless $DSN=~/:/; + $ADAPTOR ||= $DBD; + $ADAPTOR ||= 'mysql'; + + my ($use_mysql,$use_mysqlcmap,$use_pg) = (0,0,0); + if ( $ADAPTOR eq 'mysqlcmap' ) { + $use_mysqlcmap = 1; + } + elsif ( $ADAPTOR =~ /^mysql/ ) { + $use_mysql = 1; + } + elsif ( $ADAPTOR eq "pg" ) { + $use_pg = 1; + } + else{ + die "$ADAPTOR is not an acceptable database adaptor."; + } + + my (@auth,$AUTH); if (defined $USER) { push @auth,(-user=>$USER); ! if ( $use_mysql or $use_mysqlcmap ) { ! $AUTH .= " -u$USER"; ! } ! elsif ( $use_pg ) { ! $AUTH .= " -U $USER "; ! } } if (defined $PASSWORD) { push @auth,(-pass=>$PASSWORD); ! if ( $use_mysql or $use_mysqlcmap ) { ! $AUTH .= " -p$PASSWORD"; ! } ! elsif ( $use_pg ) { ! $AUTH .= " -W $PASSWORD "; ! } } if (defined $HOST) { $AUTH .= " -h$HOST"; } if (defined $DBNAME) { ! if ( $use_mysql or $use_mysqlcmap ) { ! $AUTH .= " -D$DBNAME "; ! } } if (defined $LOCAL) { *************** *** 190,195 **** } ! my $db = Bio::DB::GFF->new(-adaptor=>'faux',-dsn => $DSN,@auth) or die "Can't open database: ",Bio::DB::GFF->error,"\n"; --- 280,295 ---- } + my $faux_adaptor; + if ( $use_mysqlcmap ) { + $faux_adaptor = "fauxmysqlcmap"; + } + elsif ( $use_mysql ) { + $faux_adaptor = "fauxmysql"; + } + elsif ( $use_pg ) { + $faux_adaptor = "fauxpg"; + } ! my $db = Bio::DB::GFF->new(-adaptor=>$faux_adaptor,-dsn => $DSN,@auth) or die "Can't open database: ",Bio::DB::GFF->error,"\n"; *************** *** 222,226 **** my (@gff,@fasta); foreach (@ARGV) { ! if (/\.(fa|fasta|dna|seq|fast)/i) { push @fasta,$_; } else { --- 322,326 ---- my (@gff,@fasta); foreach (@ARGV) { ! if (/\.(fa|fasta|dna|seq|fast)$/i) { push @fasta,$_; } else { *************** *** 241,244 **** --- 341,351 ---- } + if ( $use_pg ) { + $FH{FDATA() }->print("COPY fdata (fid, fref, fstart, fstop, fbin, ftypeid, fscore, fstrand, fphase, gid, ftarget_start, ftarget_stop) FROM stdin;\n"); + $FH{FTYPE() }->print("COPY ftype (ftypeid, fmethod, fsource) FROM stdin;\n"); + $FH{FGROUP() }->print("COPY fgroup (gid, gclass, gname) FROM stdin;\n"); + $FH{FATTRIBUTE() }->print("COPY fattribute (fattribute_id, fattribute_name) FROM stdin;\n"); + $FH{FATTRIBUTE_TO_FEATURE()}->print("COPY fattribute_to_feature (fid, fattribute_id, fattribute_value) FROM stdin;\n"); + } my $FID = 1; my $GID = 1; *************** *** 266,269 **** --- 373,400 ---- } + my ($cmap_db); + if ($use_mysqlcmap){ + my $options = { + AutoCommit => 1, + FetchHashKeyName => 'NAME_lc', + LongReadLen => 3000, + LongTruncOk => 1, + RaiseError => 1, + }; + + $cmap_db = DBI->connect( $DSN, $USER, $PASSWORD, $options ); + } + # Only load CMap::Utils if using cmap + unless (!$use_mysqlcmap or + eval { + require Bio::GMOD::CMap::Utils; + Bio::GMOD::CMap::Utils->import('next_number'); + 1; + } + ) { + print STDERR "Error loading Bio::GMOD::CMap::Utils\n"; + } + + while (<>) { chomp; *************** *** 294,298 **** next; } - elsif (/^\#\#\s*group-tags\s+(.+)/) { $db->preferred_groups(split(/\s+/,$1)); --- 425,428 ---- *************** *** 312,316 **** ($ref,$source,$method,$start,$stop,$score,$strand,$phase,$group) = split "\t"; } ! next unless defined $ref; $FEATURES++; my $size = $stop-$start+1; --- 442,449 ---- ($ref,$source,$method,$start,$stop,$score,$strand,$phase,$group) = split "\t"; } ! if ( not defined( $ref ) or length ($ref) == 0) { ! warn "\$ref is null. source = $source, method = $method, group = $group\n"; ! next; ! } $FEATURES++; my $size = $stop-$start+1; *************** *** 336,340 **** my $bin = bin($start,$stop,$db->min_bin); $FH{ FDATA() }->print( join("\t",$fid,$ref,$start,$stop,$bin,$ftypeid,$score,$strand,$phase,$gid,$target_start,$target_stop),"\n" ); ! $FH{ FGROUP() }->print( join("\t",$gid,$group_class,$group_name),"\n" ) unless $DONE{"G$gid"}++; $FH{ FTYPE() }->print( join("\t",$ftypeid,$method,$source),"\n" ) unless $DONE{"T$ftypeid"}++; --- 469,488 ---- my $bin = bin($start,$stop,$db->min_bin); $FH{ FDATA() }->print( join("\t",$fid,$ref,$start,$stop,$bin,$ftypeid,$score,$strand,$phase,$gid,$target_start,$target_stop),"\n" ); ! if ($use_mysqlcmap){ ! my $feature_id = next_number( ! db => $cmap_db, ! table_name => 'cmap_feature', ! id_field => 'feature_id', ! ) ! or die 'No feature id'; ! my $direction = $strand eq '-' ? -1:1; ! $FH{ FGROUP() }->print( ! join("\t",$feature_id,$feature_id,'NULL',0, $group_name,0,0,'NULL',1,$direction, $group_class,) ! ,"\n" ! ) unless $DONE{"G$gid"}++; ! } ! else { ! $FH{ FGROUP() }->print( join("\t",$gid,$group_class,$group_name),"\n" ) unless $DONE{"G$gid"}++; ! } $FH{ FTYPE() }->print( join("\t",$ftypeid,$method,$source),"\n" ) unless $DONE{"T$ftypeid"}++; *************** *** 358,372 **** for my $file (@fasta) { warn "Preparing DNA file $file....\n"; my $old = select($FH{FDNA()}); $db->load_fasta($file); warn "done...\n"; select $old; } - $_->close foreach values %FH; printf STDERR "Total parse time %5.2fs\n",(Time::HiRes::time() - $start) if $timer; warn "Loading feature data. You may see duplicate key warnings here...\n"; $start = time(); --- 506,555 ---- for my $file (@fasta) { warn "Preparing DNA file $file....\n"; + if ($use_pg){ + $FH{FDNA() }->print("COPY fdna (fref, foffset, fdna) FROM stdin;\n"); + } my $old = select($FH{FDNA()}); $db->load_fasta($file); + if ($use_pg){ + $FH{FDNA() }->print("\\.\n\n"); + } warn "done...\n"; select $old; } + if ($use_pg) { + $FH{FDATA() }->print("\\.\n\n"); + $FH{FTYPE() }->print("\\.\n\n"); + $FH{FGROUP() }->print("\\.\n\n"); + $FH{FATTRIBUTE() }->print("\\.\n\n"); + $FH{FATTRIBUTE_TO_FEATURE()}->print("\\.\n\n"); + } + $_->close foreach values %FH; printf STDERR "Total parse time %5.2fs\n",(Time::HiRes::time() - $start) if $timer; warn "Loading feature data. You may see duplicate key warnings here...\n"; + if ($use_pg){ + warn "Loading feature data. You may see Postgres comments...\n"; + + foreach (@files) { + my $file = "$tmpdir/$_.$$"; + + $AUTH ? system("psql $AUTH -f $file $DSN") + : system('psql','-f', $file, $DSN); + + unlink $file; + } + + warn "Updating sequences ...\n"; + $db->update_sequences(); + + warn "Creating indexes ...\n"; + $db->_create_indexes_etc(); + + warn "done...\n"; + + } + elsif( $use_mysql or $use_mysqlcmap ) { $start = time(); *************** *** 374,385 **** my $TERMINATEDBY = $bWINDOWS ? q( LINES TERMINATED BY '\r\n') : ''; foreach (@files) { ! my $command =< http://bugzilla.open-bio.org/show_bug.cgi?id=1759 Summary: AlignIO reads wrong data from the Clustalw file which has no ClustalW header Product: Bioperl Version: main-trunk Platform: PC OS/Version: Linux Status: NEW Severity: minor Priority: P2 Component: Core Components AssignedTo: bioperl-guts-l@bioperl.org ReportedBy: samborsky_d@yahoo.com Hi All, I've encountered the problem, when I've tried to read slightly not correct ClustalW file. It was a file w/o start 'ClustalW 1.81 ... ' line, I've been warned by the -------------------- WARNING --------------------- MSG: trying to parse a file which does not start with a CLUSTAL header --------------------------------------------------- message, but the parsing succeeded, and only later I've noticed that the result in this case is wrong: first alignment's row is absent or shorter than others. I am incline to consider this behavior as an error, because in many application warnings may be suppressed/redirected, i.e. not visible for user. The error could be easily reproduced, sorry, I don't send a script for that. Thanks in advance! Best wishes, Dmitry Samborskiy ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. From jason at pub.open-bio.org Thu Mar 10 10:11:49 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Thu Mar 10 09:57:04 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Tools/Phylo PAML.pm,1.26,1.27 Message-ID: <200503101511.j2AFBnDT007454@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Tools/Phylo In directory pub.open-bio.org:/tmp/cvs-serv7438/Bio/Tools/Phylo Modified Files: PAML.pm Log Message: slight doc cleanup -- still need a better SYNOPSIS for all the options Index: PAML.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Tools/Phylo/PAML.pm,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** PAML.pm 2 Mar 2005 03:38:07 -0000 1.26 --- PAML.pm 10 Mar 2005 15:11:46 -0000 1.27 *************** *** 81,85 **** # inspect the tree: the "t" (time) parameter is available via # $node->branch_length(); all other branch-specific parameters ! # ("omega", "dN", etc.) are available via $node->param('omega'); } --- 81,85 ---- # inspect the tree: the "t" (time) parameter is available via # $node->branch_length(); all other branch-specific parameters ! # ("omega", "dN", etc.) are available via ($omega) = $node->get_tag_values('omega'); } *************** *** 133,145 **** Report bugs to the Bioperl bug tracking system to help us keep track ! of the bugs and their resolution. Bug reports can be submitted via ! email or the web: - bioperl-bugs@bioperl.org http://bugzilla.bioperl.org/ =head1 AUTHOR - Jason Stajich, Aaron Mackey ! Email jason-at=bioperl.org Email amackey-at-virginia.edu --- 133,144 ---- Report bugs to the Bioperl bug tracking system to help us keep track ! of the bugs and their resolution. Bug reports can be submitted via the ! web: http://bugzilla.bioperl.org/ =head1 AUTHOR - Jason Stajich, Aaron Mackey ! Email jason-at-bioperl.org Email amackey-at-virginia.edu From jason at pub.open-bio.org Thu Mar 10 10:12:36 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Thu Mar 10 09:57:53 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Tree Node.pm,1.36,1.37 Message-ID: <200503101512.j2AFCaDT007504@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Tree In directory pub.open-bio.org:/tmp/cvs-serv7488/Bio/Tree Modified Files: Node.pm Log Message: play nice with wantarray Index: Node.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Tree/Node.pm,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** Node.pm 16 Dec 2004 17:40:09 -0000 1.36 --- Node.pm 10 Mar 2005 15:12:34 -0000 1.37 *************** *** 629,633 **** sub get_tag_values{ my ($self,$tag) = @_; ! return @{$self->{'_tags'}->{$tag} || []}; } --- 629,634 ---- sub get_tag_values{ my ($self,$tag) = @_; ! return wantarray ? @{$self->{'_tags'}->{$tag} || []} : ! (@{$self->{'_tags'}->{$tag} || []})[0]; } From jason at pub.open-bio.org Thu Mar 10 10:13:00 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Thu Mar 10 09:58:16 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Tools/Phylo/PAML ModelResult.pm, 1.2, 1.3 Message-ID: <200503101513.j2AFD0DT007528@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Tools/Phylo/PAML In directory pub.open-bio.org:/tmp/cvs-serv7512/Bio/Tools/Phylo/PAML Modified Files: ModelResult.pm Log Message: return an empty array where appropriate Index: ModelResult.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Tools/Phylo/PAML/ModelResult.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ModelResult.pm 8 Sep 2003 12:17:15 -0000 1.2 --- ModelResult.pm 10 Mar 2005 15:12:58 -0000 1.3 *************** *** 306,310 **** sub get_pos_selected_sites{ ! return @{$_[0]->{'_posselsites'}}; } --- 306,310 ---- sub get_pos_selected_sites{ ! return @{$_[0]->{'_posselsites'} || []}; } From radams at pub.open-bio.org Fri Mar 11 08:27:32 2005 From: radams at pub.open-bio.org (Richard Adams) Date: Fri Mar 11 08:12:53 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Graph ProteinGraph.pm,1.19,1.20 Message-ID: <200503111327.j2BDRWDT011195@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Graph In directory pub.open-bio.org:/tmp/cvs-serv11179/Bio/Graph Modified Files: ProteinGraph.pm Log Message: bug removed from union() to allow faster merging Index: ProteinGraph.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Graph/ProteinGraph.pm,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** ProteinGraph.pm 12 Jan 2005 18:11:11 -0000 1.19 --- ProteinGraph.pm 11 Mar 2005 13:27:29 -0000 1.20 *************** *** 349,366 **** my @common_nodes; my %detected_common_nodes; ## for each node see if Ids are in common between the 2 graphs ! ## just get1 common id per sequence for my $id (sort keys %{$self->{'_id_map'}}) { ! if (exists($other->{'_id_map'}{$id}) && ! !exists($detected_common_nodes{$self->{'_id_map'}{$id}})) { ! push @common_nodes, $id; ! $detected_common_nodes{$self->{'_id_map'}{$id}} = undef; } } ## now cyle through common nodes.. for my $common (@common_nodes) { ! ## get neighbours of common node for self and other my @self_ns = $self->neighbors($self->nodes_by_id($common)); --- 349,377 ---- my @common_nodes; my %detected_common_nodes; + my %seen_ids; # holds ids of nodes already known to be common. ## for each node see if Ids are in common between the 2 graphs ! ## just get1 common id per sequence. ! ! ##Produces too many common nodesm we only need 1 common id between nodes. for my $id (sort keys %{$self->{'_id_map'}}) { ! if (exists($other->{'_id_map'}{$id}) ) { ! ## check if this node has a commonlink kown lready: ! my $node = $self->nodes_by_id($id); ! my $acc = $node->accession_number; ! if (!exists($detected_common_nodes{$acc})) { ! push @common_nodes, $id; ## we store the common id ! $detected_common_nodes{$acc} = undef; ## this means we won't store >1 common identifier ! } } } ## now cyle through common nodes.. + print STDERR "there are ", scalar @common_nodes, " common nodes\n"; + my $i = 0; for my $common (@common_nodes) { ! if ($i++ % 10 ==0 ) { ! print STDERR "."; ! } ## get neighbours of common node for self and other my @self_ns = $self->neighbors($self->nodes_by_id($common)); *************** *** 376,380 **** ## case (1) in description ## do any ids in other graph exist in self ? ! #if yes, @int_match is defined, interaction does not invlove a new node my @int_match = grep{exists($self->{'_id_map'}{$_}) } keys %other_n_ids; if (@int_match){ --- 387,391 ---- ## case (1) in description ## do any ids in other graph exist in self ? ! #if yes, @int_match is defined, interaction does not involve a new node my @int_match = grep{exists($self->{'_id_map'}{$_}) } keys %other_n_ids; if (@int_match){ *************** *** 395,400 **** my $edge = Bio::Graph::Edge->new( -weight=> $other_edge->weight(), ! -id => $other_edge->object_id(), ! -nodes =>[$self->nodes_by_id($common), $self->nodes_by_id($int_match[$i]) ]); --- 406,411 ---- my $edge = Bio::Graph::Edge->new( -weight=> $other_edge->weight(), ! -id => $other_edge->object_id(), ! -nodes =>[$self->nodes_by_id($common), $self->nodes_by_id($int_match[$i]) ]); *************** *** 408,415 **** } #end if ## but if other neighbour is entirely new, clone it and ! ## make connection. else { my $other_edge = $other->edge($other->nodes_by_id($other_n->object_id()), ! $other->nodes_by_id($common)); my $new = clone($other_n); $self->add_edge(Bio::Graph::Edge->new( --- 419,426 ---- } #end if ## but if other neighbour is entirely new, clone it and ! ## make connection. else { my $other_edge = $other->edge($other->nodes_by_id($other_n->object_id()), ! $other->nodes_by_id($common)); my $new = clone($other_n); $self->add_edge(Bio::Graph::Edge->new( *************** *** 486,492 **** Name : _get_ids_by_db Purpose : gets all ids for a node, assuming its Bio::Seq object ! Arguments: A Bio::PrimarySeqI object ! Returns : A hash: Keys are sequence ids, values are undef ! Usage : my %ids = _get_ids_by_db($seqobj); =cut --- 497,503 ---- Name : _get_ids_by_db Purpose : gets all ids for a node, assuming its Bio::Seq object ! Arguments: A Bio::SeqI object ! Returns : A hash: Keys are db ids, values are accessions ! Usage : my %ids = $gr->_get_ids_by_db($seqobj); =cut *************** *** 496,511 **** my $dummy_self = shift; while (my $n = shift @_ ){ #ref to node, assume is a Bio::Seq ! if (!$n->isa('Bio::PrimarySeqI')) { $n->throw("I need a Bio::Seq object, not a [" .ref($n) ."]"); } - ## get ids - #map{$ids{$_} = undef}($n->accession_number, $n->primary_id); ##if BioSeq getdbxref ids as well. ! if ($n->can('annotation')) { ! my $ac = $n->annotation(); ! for my $an($ac->get_Annotations('dblink')) { ! $ids{$an->database()} = $an->primary_id(); ! } } } --- 507,518 ---- my $dummy_self = shift; while (my $n = shift @_ ){ #ref to node, assume is a Bio::Seq ! if (!$n->isa('Bio::SeqI')) { $n->throw("I need a Bio::Seq object, not a [" .ref($n) ."]"); } ##if BioSeq getdbxref ids as well. ! my $ac = $n->annotation(); ! for my $an($ac->get_Annotations('dblink')) { ! $ids{$an->database()} = $an->primary_id(); } } *************** *** 928,936 **** --- 935,951 ---- my $self = shift; + ## see if results are cahced already + $self->{'_artic_points'} ||= ''; + return $self->{'_artic_points'} if $self->{'_artic_points'}; + + ## else calculate... my @subgraphs = $self->components(); + my %rts; + for my $sg (@subgraphs) { my $all_nodes = $sg->_nodes; + ##ignore isolated vertices next if scalar keys %$all_nodes <= 2; *************** *** 992,997 **** }#next node }#next sg ! return values %rts; ## } --- 1007,1038 ---- }#next node }#next sg + ## cache results and return + $self->{'_artic_points'} = [values %rts]; ## + return $self->{'_artic_points'}; + } ! =head2 is_articulation_point ! ! Name : is_articulation_point ! Purpose : to determine if a given node is an articulation point or not. ! Usage : if ($gr->is_articulation_point($node)) {.... ! Arguments : a text identifier for the protein or the node itself ! Returns : 1 if node is an articulation point, 0 if it isn't ! ! =cut ! ! sub is_articulation_point { ! my ($self, $val) = @_; ! my $node = $self->_check_args($val); ! ! ## this uses a cached value so doesn't have to recalculate each time.. ! my $artic_pt_ref = $self->articulation_points(); ! my $acc = $node->accession_number; ! if (grep{$_->accession_number eq $acc} @$artic_pt_ref ){ ! return 1; ! } ! else { ! return 0; ! } } From radams at pub.open-bio.org Fri Mar 11 08:28:40 2005 From: radams at pub.open-bio.org (Richard Adams) Date: Fri Mar 11 08:13:50 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Graph/IO dip.pm,1.10,1.11 Message-ID: <200503111328.j2BDSeDT011221@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Graph/IO In directory pub.open-bio.org:/tmp/cvs-serv11205/Bio/Graph/IO Modified Files: dip.pm Log Message: changed write() not to fail tests Index: dip.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Graph/IO/dip.pm,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** dip.pm 7 Dec 2004 13:03:42 -0000 1.10 --- dip.pm 11 Mar 2005 13:28:38 -0000 1.11 *************** *** 162,167 **** # print out nodes in dip order my %ids = $gr->_get_ids_by_db($n); #need to modify this in graph() ! ! for my $db (qw(DIP SWP PIR GI)){ if (exists($ids{$db})){ $str .= "$db:$ids{$db}\t"; --- 162,166 ---- # print out nodes in dip order my %ids = $gr->_get_ids_by_db($n); #need to modify this in graph() ! for my $db (qw(DIP SWP PIR GI Ref-Seq RefSeq psixml ens)){ if (exists($ids{$db})){ $str .= "$db:$ids{$db}\t"; From rdobson at pub.open-bio.org Fri Mar 11 12:17:19 2005 From: rdobson at pub.open-bio.org (Rich Dobson) Date: Fri Mar 11 12:03:33 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/PopGen/IO hapmap.pm,1.3,1.4 Message-ID: <200503111717.j2BHHJDT011882@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/PopGen/IO In directory pub.open-bio.org:/tmp/cvs-serv11866 Modified Files: hapmap.pm Log Message: = 11 as of Dec 2004 Index: hapmap.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/PopGen/IO/hapmap.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** hapmap.pm 1 Jun 2004 13:50:52 -0000 1.3 --- hapmap.pm 11 Mar 2005 17:17:16 -0000 1.4 *************** *** 158,162 **** } } ! my $startingcol = 10; $self->{'_header'} = [ map { $_->[0] } @cols]; --- 158,162 ---- } } ! my $startingcol = 11; $self->{'_header'} = [ map { $_->[0] } @cols]; From jason at pub.open-bio.org Fri Mar 11 17:31:28 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Fri Mar 11 17:22:47 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Tools/Phylo PAML.pm,1.27,1.28 Message-ID: <200503112231.j2BMVSDT013877@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Tools/Phylo In directory pub.open-bio.org:/tmp/cvs-serv13854 Modified Files: PAML.pm Log Message: parse input params Index: PAML.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Tools/Phylo/PAML.pm,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** PAML.pm 10 Mar 2005 15:11:46 -0000 1.27 --- PAML.pm 11 Mar 2005 22:31:26 -0000 1.28 *************** *** 365,368 **** --- 365,369 ---- $data{'-aafreq'} = $self->{'_summary'}->{'aafreqs'}; $data{'-ntfreq'} = $self->{'_summary'}->{'ntfreqs'}; + $data{'-input_params'} = $self->{'_summary'}->{'inputparams'}; return new Bio::Tools::Phylo::PAML::Result %data; } else { *************** *** 465,468 **** --- 466,478 ---- my ($self) = @_; + while( defined($_ = $self->_readline ) ) { + if(/^((?:Codon frequencies)|(?:Site-class models))\s*:\s+(.+)/ ) { + my ($param,$val) = ($1,$2); + $self->{'_summary'}->{'inputparams'}->{$param} = $val; + } elsif( /^\s+$/ || /^ns\s+=\s+/ ) { + $self->_pushback($_); + last; + } + } } *************** *** 848,852 **** if( $self->verbose > 1 ) { for my $k ( sort { $a <=> $b } keys %match ) { ! warn "$k -> ",join(",",@{$match{$k}}), "\n"; } } --- 858,863 ---- if( $self->verbose > 1 ) { for my $k ( sort { $a <=> $b } keys %match ) { ! $self->debug( "$k -> ", ! join(",",@{$match{$k}}), "\n"); } } *************** *** 854,858 **** push @trees, $tree; } - # last; } $okay++; --- 865,868 ---- From jason at pub.open-bio.org Fri Mar 11 17:31:28 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Fri Mar 11 17:22:50 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Tools/Phylo/PAML Result.pm, 1.15, 1.16 Message-ID: <200503112231.j2BMVSDT013879@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Tools/Phylo/PAML In directory pub.open-bio.org:/tmp/cvs-serv13854/PAML Modified Files: Result.pm Log Message: parse input params Index: Result.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Tools/Phylo/PAML/Result.pm,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** Result.pm 8 Dec 2004 10:48:05 -0000 1.15 --- Result.pm 11 Mar 2005 22:31:26 -0000 1.16 *************** *** 26,33 **** my $result = $parser->next_result(); ! my @seqs = $result->get_seqs; ! my $MLmatrix = $result->get_MLmatrix; # get MaxLikelihood Matrix ! my $NGmatrix = $result->get_NGmatrix; # get Nei-Gojoburi Matrix ! my @basfreq = $result->get_codon_pos_basefreq; --- 26,34 ---- my $result = $parser->next_result(); ! my @seqs = $result->get_seqs; ! my %input_params = $result->get_input_parameters; ! my @basfreq = $result->get_codon_pos_basefreq; ! my $MLmatrix = $result->get_MLmatrix; # get MaxLikelihood Matrix ! my $NGmatrix = $result->get_NGmatrix; # get Nei-Gojoburi Matrix *************** *** 112,115 **** --- 113,117 ---- -alpha_mat => Bio::Matrix::PhylipDist of alpha values (only for BASEML) -NSSitesresult => arrayref of PAML::ModelResult + -input_params => input params from .ctl file =cut *************** *** 125,139 **** $aamldistmat, $ntfreqs, $kappa_mat,$alpha_mat, ! $NSSitesresults ) = $self->_rearrange([qw(TREES MLMATRIX ! SEQS NGMATRIX ! CODONPOS CODONFREQ ! VERSION MODEL PATTERNS ! STATS AAFREQ AADISTMAT ! AAMLDISTMAT ! NTFREQ ! KAPPA_DISTMAT ! ALPHA_DISTMAT ! NSSITESRESULTS)], ! @args); $self->reset_seqs; if( $trees ) { --- 127,144 ---- $aamldistmat, $ntfreqs, $kappa_mat,$alpha_mat, ! $NSSitesresults,$input_params ) = ! $self->_rearrange([qw ! (TREES MLMATRIX ! SEQS NGMATRIX ! CODONPOS CODONFREQ ! VERSION MODEL PATTERNS ! STATS AAFREQ AADISTMAT ! AAMLDISTMAT ! NTFREQ ! KAPPA_DISTMAT ! ALPHA_DISTMAT ! NSSITESRESULTS ! INPUT_PARAMS)], ! @args); $self->reset_seqs; if( $trees ) { *************** *** 242,245 **** --- 247,261 ---- $self->set_AlphaMatrix($alpha_mat); } + + if( $input_params ) { + if( ref($input_params) !~ /HASH/i ) { + warn("need a valid HASH object for input_params\n"); + } else { + while( my ($p,$v) = each %$input_params ) { + $self->set_input_parameter($p,$v); + } + } + + } return $self; } *************** *** 916,919 **** --- 932,985 ---- return undef; } + + =head2 set_input_parameter + + Title : set_input_parameter + Usage : $obj->set_input_parameter($p,$vl); + Function: Set an Input Parameter + Returns : none + Args : $parameter and $value + + + =cut + + sub set_input_parameter{ + my ($self,$p,$v) = @_; + return unless defined $p; + $self->{'_input_parameters'}->{$p} = $v; + } + + =head2 get_input_parameters + + Title : get_input_parameters + Usage : $obj->get_input_parameters; + Function: Get Input Parameters + Returns : Hash of key/value pairs + Args : none + + + =cut + + sub get_input_parameters{ + my ($self) = @_; + return %{$self->{'_input_parameters'} || {}}; + } + + =head2 reset_input_parameters + + Title : reset_input_parameters + Usage : $obj->reset_input_parameters; + Function: Reset the Input Parameters hash + Returns : none + Args : none + + + =cut + + sub reset_input_parameters{ + my ($self) = @_; + $self->{'_input_parameters'} = {}; + } + 1; From bosborne at pub.open-bio.org Sat Mar 12 21:50:13 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Sat Mar 12 21:35:38 2005 Subject: [Bioperl-guts-l] bioperl-live/doc/howto/sgml PopGen.xml,1.4,1.5 Message-ID: <200503130250.j2D2oDDT017784@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/doc/howto/sgml In directory pub.open-bio.org:/tmp/cvs-serv17775 Modified Files: PopGen.xml Log Message: Add missing tags, mediaobject, copyright Index: PopGen.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/PopGen.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** PopGen.xml 11 Mar 2005 03:21:45 -0000 1.4 --- PopGen.xml 13 Mar 2005 02:50:10 -0000 1.5 *************** *** 1,11 **** ! %global.entities; ! %entities; ! ] >
--- 1,12 ---- ! %global.entities; ! %entities; ] > +
*************** *** 18,23 **** ! Dept Molecular Genetics and Microbiology, Duke ! University
jason-at-bioperl-dot-org
--- 19,26 ---- ! ! Dept Molecular Genetics and Microbiology, Duke ! University !
jason-at-bioperl-dot-org
*************** *** 53,63 **** - -
!
Introduction --- 56,61 ---- !
Introduction *************** *** 348,352 ****
! Summary Statistics with <classname>Bio::PopGen::Statistics</classname> Pi or average pairwise differences is calculated by taking all --- 346,353 ----
! ! Summary Statistics with ! <classname>Bio::PopGen::Statistics</classname> ! Pi or average pairwise differences is calculated by taking all *************** *** 420,424 **** Waterson's theta - theta ! K = Sum ( 1 / an) --- 421,431 ---- Waterson's theta - theta ! ! ! ! K = Sum ( 1 / an) ! ! ! *************** *** 513,517 ****
! Population Statistics using <classname>Bio::PopGen::PopStats</classname> Wright's Fst can be --- 520,527 ----
! ! Population Statistics using ! <classname>Bio::PopGen::PopStats</classname> ! Wright's Fst can be *************** *** 591,603 **** ! ! Disentangling the effects of demography and selection in ! human history ! Jason E Stajich ! Matthew W Hahn --- 601,617 ---- ! ! ! Disentangling the effects of demography and selection in ! human history ! ! ! Jason E Stajich ! ! Matthew W Hahn *************** *** 605,614 **** Mol Biol Evol ! 2005 22(1):63-73 ! ! ! Population genetic and phylogenetic evidence for positive selection on regulatory mutations at the factor VII locus in humans Matthew --- 619,634 ---- Mol Biol Evol ! 2005 ! 22(1):63-73 ! + ! ! ! Population genetic and phylogenetic evidence for positive ! selection on regulatory mutations at the factor VII locus ! in humans ! Matthew *************** *** 623,627 **** Soranzo ! David B Goldstein --- 643,647 ---- Soranzo ! David B Goldstein *************** *** 633,642 **** Genetics ! 2004 167(2):867-77 ! ! ! Positive selection on a human-specific transcription factor binding site regulating IL4 expression Matthew --- 653,667 ---- Genetics ! 2004 ! 167(2):867-77 ! + ! ! ! Positive selection on a human-specific transcription ! factor binding site regulating IL4 expression ! Matthew *************** *** 661,668 **** Current Biology ! 2003 13(23):2118-23 !
--- 686,698 ---- Current Biology ! 13(23):2118-23 ! ! 2003 ! ! + +
From radams at pub.open-bio.org Mon Mar 14 07:52:56 2005 From: radams at pub.open-bio.org (Richard Adams) Date: Mon Mar 14 07:37:50 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Graph SimpleGraph.pm,1.7,1.8 Message-ID: <200503141252.j2ECquDT031470@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Graph In directory pub.open-bio.org:/tmp/cvs-serv31454/Bio/Graph Modified Files: SimpleGraph.pm Log Message: alter edges() and has_edge() to work with Bio::GRaph::Edge objects as well as simple edges Index: SimpleGraph.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Graph/SimpleGraph.pm,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** SimpleGraph.pm 8 Dec 2004 11:46:41 -0000 1.7 --- SimpleGraph.pm 14 Mar 2005 12:52:53 -0000 1.8 *************** *** 559,565 **** while (@_) { my($m,$n); ! if ('ARRAY' eq ref $_[0]) { # it's already an edge my $edge = shift; ! ($m,$n) = @$edge; } else { ($m,$n)=(shift,shift); --- 559,565 ---- while (@_) { my($m,$n); ! if ('ARRAY' eq ref $_[0] || $_[0]->isa('Bio::Graph::Edge')) { # it's already an edge my $edge = shift; ! ($m,$n) = @$edge[0..1]; } else { ($m,$n)=(shift,shift); *************** *** 591,597 **** while (@_) { my($m,$n); ! if ('ARRAY' eq ref $_[0]) { # it's already an edge my $edge = shift; ! ($m,$n) = @$edge; } else { ($m,$n) = (shift,shift); --- 591,597 ---- while (@_) { my($m,$n); ! if ('ARRAY' eq ref $_[0] || $_[0]->isa('Bio::Graph::Edge')) { # it's already an edge my $edge = shift; ! ($m,$n) = @$edge[0..1];#first 2 elements are nodes } else { ($m,$n) = (shift,shift); *************** *** 713,717 **** sub subgraph { my $self=shift; ! my $subgraph=new Bio::Graph::SimpleGraph; $subgraph->add_node(@_); # add all edges amongst the nodes --- 713,721 ---- sub subgraph { my $self=shift; ! ! ## make new graph of same type as parent ! my $class = ref($self); ! my $subgraph = new $class; ! $subgraph->add_node(@_); # add all edges amongst the nodes *************** *** 878,885 **** my @nodes = $self->nodes; my %future; @future{@nodes}=(0)x@nodes; while(my($node, $used)=each %future) { next if $used; ! my $component = $self->subgraph($self->traversal($self->node($node))->get_all); my @nodes = $component->nodes; @future{@nodes} = (1)x@nodes; --- 882,895 ---- my @nodes = $self->nodes; my %future; + my $i = 1; @future{@nodes}=(0)x@nodes; while(my($node, $used)=each %future) { + if ($i++ %10 ==0 ) { + print STDERR "|"; + } next if $used; ! my @nodes = $self->traversal($self->node($node))->get_all; ! ! my $component = $self->subgraph(@nodes); my @nodes = $component->nodes; @future{@nodes} = (1)x@nodes; From bosborne at pub.open-bio.org Mon Mar 14 07:53:55 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Mon Mar 14 07:38:46 2005 Subject: [Bioperl-guts-l] bioperl-live/doc/howto/sgml Feature-Annotation.xml, 1.2, 1.3 Message-ID: <200503141253.j2ECrtDT031504@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/doc/howto/sgml In directory pub.open-bio.org:/tmp/cvs-serv31495 Modified Files: Feature-Annotation.xml Log Message: Edits Index: Feature-Annotation.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/Feature-Annotation.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Feature-Annotation.xml 11 Mar 2005 03:21:45 -0000 1.2 --- Feature-Annotation.xml 14 Mar 2005 12:53:53 -0000 1.3 *************** *** 160,164 **** # BAB55667.gb is a Genbank file, and Bioperl knows that it ! # is a Genbank file because of the '.gb' file suffix use Bio::SeqIO; --- 160,164 ---- # BAB55667.gb is a Genbank file, and Bioperl knows that it ! # is a Genbank file because of the '.gb' file suffix use Bio::SeqIO; *************** *** 245,249 **** the Bioperl documentation one finds discussions of the "SeqFeature object", but there's more ! than one of these, so what is this a reference to? More than likely it's referring to this same next_seq; }; # if there's an error ! print "Problem in $gb_file. Bad feature perhaps?\n" if $@;
--- 368,372 ---- eval { $seq_object = $seqio_object->next_seq; }; # if there's an error ! print "Problem in $gb_file. Bad feature perhaps?\n" if $@; *************** *** 1106,1110 **** print $tag,":",$feat->get_tag_values($tag)," "; } ! # prints out: # author:john match1:PF000123 e-7.2 match2:PF002534 e-3.1 note:TATA box --- 1107,1111 ---- print $tag,":",$feat->get_tag_values($tag)," "; } ! # prints out: # author:john match1:PF000123 e-7.2 match2:PF002534 e-3.1 note:TATA box *************** *** 1126,1130 **** # create a simple Sequence object my $seq_obj = Bio::Seq->new(-seq => "attcccccttataaaattttttttttgaggggtggg", ! -display_id => "BIO52" ); # then add the feature we've created to the sequence $seq_obj->add_SeqFeature($feat); --- 1127,1131 ---- # create a simple Sequence object my $seq_obj = Bio::Seq->new(-seq => "attcccccttataaaattttttttttgaggggtggg", ! -display_id => "BIO52" ); # then add the feature we've created to the sequence $seq_obj->add_SeqFeature($feat); From radams at pub.open-bio.org Mon Mar 14 07:54:12 2005 From: radams at pub.open-bio.org (Richard Adams) Date: Mon Mar 14 07:39:03 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Graph ProteinGraph.pm,1.20,1.21 Message-ID: <200503141254.j2ECsCDT031528@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Graph In directory pub.open-bio.org:/tmp/cvs-serv31512/Bio/Graph Modified Files: ProteinGraph.pm Log Message: add subgraph() which overrides that in SimpleGraph.pm, articulation_points returns array ref, not array Index: ProteinGraph.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Graph/ProteinGraph.pm,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** ProteinGraph.pm 11 Mar 2005 13:27:29 -0000 1.20 --- ProteinGraph.pm 14 Mar 2005 12:54:10 -0000 1.21 *************** *** 565,574 **** my $edge; while (@_) { ! if ( $_[0]->isa('Bio::Graph::Edge') ) { # it's already an edge ! $edge = shift; ! } ! elsif(ref($_[0]) eq 'ARRAY' || !ref($_[0])) { ! $self->SUPER::add_edges(@_); return; } else { --- 565,576 ---- my $edge; while (@_) { ! if ( ref($_[0]) eq 'ARRAY' || !ref($_[0])) { ! $self->SUPER::add_edges(@_); return; + + } + elsif ( $_[0]->isa('Bio::Graph::Edge') ) { # it's already an edge + $edge = shift; + } else { *************** *** 605,608 **** --- 607,655 ---- } + =head2 subgraph + + Name : subgraph + Purpose : To construct a subgraph of nodes from the main network.This + method overrides that of Bio::Graph::SimpleGraph in its dealings with Edge + objects. + Usage : my $sg = $gr->subgraph(@nodes). + Returns : A subgraph of the same class as the original graph. Edge objects are cloned from + the original graph but node objects are shared, so beware if you start deleting + nodes from the parent graph whilst operating on subgraph nodes. + Arguments : A list of node objects. + + + + + =cut + sub subgraph { + my $self=shift; + + ## make new graph of same type as parent + my $class = ref($self); + my $subgraph = new $class; + $subgraph->add_node(@_); + # add all edges amongst the nodes + my @nodes=$subgraph->nodes; + my $i = 1; + while(@nodes) { + if ($i++ % 100 == 0) { print STDERR ".";} + my $m=shift @nodes; + my $edges = $self->_edges; + for my $n (@nodes) { + if ($self->has_edge([$m,$n])) { + my ($edge) = $self->edges([$m,$n]); ## returns list of edges + my $id = $edge->object_id; + $subgraph->add_edge(Bio::Graph::Edge->new(-nodes=>[$m,$n], + -id => $id)); + } + } + }#next node + return $subgraph; + } + + + + =head2 add_dup_edge *************** *** 940,943 **** --- 987,991 ---- ## else calculate... + print STDERR "doing subgraphs\n"; my @subgraphs = $self->components(); *************** *** 946,949 **** --- 994,998 ---- for my $sg (@subgraphs) { my $all_nodes = $sg->_nodes; + print STDERR "in subgraph - size", scalar keys %$all_nodes, "\n"; From radams at pub.open-bio.org Mon Mar 14 09:15:13 2005 From: radams at pub.open-bio.org (Richard Adams) Date: Mon Mar 14 09:00:12 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Graph ProteinGraph.pm,1.21,1.22 Message-ID: <200503141415.j2EEFDDT031738@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Graph In directory pub.open-bio.org:/tmp/cvs-serv31722/Bio/Graph Modified Files: ProteinGraph.pm Log Message: Nodes can now be any objects that implement Bio::IdentifiableI and Bio::AnnotatableI interfaces Index: ProteinGraph.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Graph/ProteinGraph.pm,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** ProteinGraph.pm 14 Mar 2005 12:54:10 -0000 1.21 --- ProteinGraph.pm 14 Mar 2005 14:15:11 -0000 1.22 *************** *** 140,145 **** identify the nodes. ! This graph uses Bio::Seq objects for the nodes, as this class is ! familiar to most BioPerl users. At present it is fairly 'lightweight' in that it represents nodes and --- 140,148 ---- identify the nodes. ! This graph can use any objects that implement Bio::AnnotatableI and Bio::IdentifiableI ! interfaces. Bio::Seq (but not Bio::PrimarySeqI) ! objects can therefore be used for the nodes, as this class is ! familiar to most BioPerl users. Any object that supports annotation objects and the object_id() ! method should work fine. At present it is fairly 'lightweight' in that it represents nodes and *************** *** 274,278 **** Usage : my @neighbors= $self->neighbors($self->nodes_by_id('O232322')) Returns : a SimpleGraph node representation ( a text representation ! of a node needed fro other graph methods e.g., neighbors(), edges() Arguments : a protein identifier., e.g., its accession number. --- 277,281 ---- Usage : my @neighbors= $self->neighbors($self->nodes_by_id('O232322')) Returns : a SimpleGraph node representation ( a text representation ! of a node needed for other graph methods e.g., neighbors(), edges() Arguments : a protein identifier., e.g., its accession number. *************** *** 359,363 **** ## check if this node has a commonlink kown lready: my $node = $self->nodes_by_id($id); ! my $acc = $node->accession_number; if (!exists($detected_common_nodes{$acc})) { push @common_nodes, $id; ## we store the common id --- 362,366 ---- ## check if this node has a commonlink kown lready: my $node = $self->nodes_by_id($id); ! my $acc = $node->object_id; if (!exists($detected_common_nodes{$acc})) { push @common_nodes, $id; ## we store the common id *************** *** 486,491 **** my ($self, $node) = @_; ! if (!$node->isa('Bio::SeqI')) { ! $self->throw ("I need a Bio::SeqI object here , not a " . ref($node) . "."); } my @nbors = $self->neighbors($node); --- 489,494 ---- my ($self, $node) = @_; ! if (!$node->isa('Bio::NodeI')) { ! $self->throw ("I need a Bio::NodeI implementing object here , not a " . ref($node) . "."); } my @nbors = $self->neighbors($node); *************** *** 507,512 **** my $dummy_self = shift; while (my $n = shift @_ ){ #ref to node, assume is a Bio::Seq ! if (!$n->isa('Bio::SeqI')) { ! $n->throw("I need a Bio::Seq object, not a [" .ref($n) ."]"); } --- 510,515 ---- my $dummy_self = shift; while (my $n = shift @_ ){ #ref to node, assume is a Bio::Seq ! if (!$n->isa('Bio::AnnotatableI') || ! $n->isa('Bio::IdentifiableI' )) { ! $n->throw("I need a Bio::AnnotatableI and Bio::IdentifiableI implementing object, not a [" .ref($n) ."]"); } *************** *** 525,533 **** my $dummy_self = shift; while (my $n = shift @_ ){ #ref to node, assume is a Bio::Seq ! if (!$n->isa('Bio::PrimarySeqI')) { ! $n->throw("I need a Bio::Seq object, not a [" .ref($n) ."]"); } #get ids ! map{$ids{$_} = undef}($n->accession_number, $n->primary_id); ##if BioSeq getdbxref ids as well. --- 528,536 ---- my $dummy_self = shift; while (my $n = shift @_ ){ #ref to node, assume is a Bio::Seq ! if (!$n->isa('Bio::AnnotatableI') || ! $n->isa('Bio::IdentifiableI' )) { ! $n->throw("I need a Bio::AnnotatableI and Bio::IdentifiableI implementing object, not a [" .ref($n) ."]"); } #get ids ! map{$ids{$_} = undef}($n->object_id); ##if BioSeq getdbxref ids as well. *************** *** 1100,1104 **** my $n; if (!$val ) { ! $self->throw( " I need a node that's a sequence object"); } --- 1103,1107 ---- my $n; if (!$val ) { ! $self->throw( " I need a node that's a Bio::AnnotatableI and Bio::IdentifiableI"); } *************** *** 1110,1117 **** } } ! # if reference should be a SeqObj ! elsif(!$val->isa('Bio::SeqI')){ ! $self->throw( " I need a node that's a sequence object". ! " not a [". ref($val) . "]."); } --- 1113,1119 ---- } } ! # if reference should be a NodeI implementing object. ! elsif (!$val->isa('Bio::AnnotatableI') || !$val->isa('Bio::IdentifiableI')) { ! $self->throw( " I need a node that's a Bio::AnnotatableI and Bio::IdentifiableI ,not a [". ref($val) . "]."); } From bosborne at pub.open-bio.org Thu Mar 10 22:21:47 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Mon Mar 14 10:15:52 2005 Subject: [Bioperl-guts-l] bioperl-live/doc/howto/sgml Beginners.xml, 1.29, 1.30 Feature-Annotation.xml, 1.1, 1.2 Flat_Databases.xml, 1.1, 1.2 Graphics-HOWTO.xml, 1.1, 1.2 OBDA_Access.xml, 1.2, 1.3 PAML.xml, 1.1, 1.2 PopGen.xml, 1.3, 1.4 SearchIO.xml, 1.2, 1.3 SeqIO.xml, 1.6, 1.7 Trees.xml, 1.1, 1.2 entities.xml, 1.1, 1.2 global.xml, 1.1, 1.2 Message-ID: <200503110321.j2B3LlDT009650@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/doc/howto/sgml In directory pub.open-bio.org:/tmp/cvs-serv9641 Modified Files: Beginners.xml Feature-Annotation.xml Flat_Databases.xml Graphics-HOWTO.xml OBDA_Access.xml PAML.xml PopGen.xml SearchIO.xml SeqIO.xml Trees.xml entities.xml global.xml Log Message: Add tag, apparently necessary in the latest Docbook Index: Graphics-HOWTO.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/Graphics-HOWTO.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Graphics-HOWTO.xml 3 Jan 2005 13:00:32 -0000 1.1 --- Graphics-HOWTO.xml 11 Mar 2005 03:21:45 -0000 1.2 *************** *** 16,20 **** ! Cold Spring Harbor Laboratory
--- 16,20 ---- ! Cold Spring Harbor Laboratory
*************** *** 725,730 **** Bio::SeqFeatureI objects, and to use those features to populate tracks (see the Feature-Annotation ! HOWTO for more information on features). The documentation for each of the individual. For simplicity's sake, we will sort each feature by its primary tag (such as "exon") and create a new track for --- 725,730 ---- Bio::SeqFeatureI objects, and to use those features to populate tracks (see the Feature-Annotation ! HOWTO for more information on features). The documentation for each of the individual. For simplicity's sake, we will sort each feature by its primary tag (such as "exon") and create a new track for *************** *** 1168,1172 **** Although we haven't shown it, Bio::Graphics provides support for generating HTML image maps. The Generic Genome Browser uses this facility to generate clickable, browsable images of the genome from a variety of genome databases. --- 1168,1172 ---- Although we haven't shown it, Bio::Graphics provides support for generating HTML image maps. The Generic Genome Browser uses this facility to generate clickable, browsable images of the genome from a variety of genome databases. Index: Feature-Annotation.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/Feature-Annotation.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Feature-Annotation.xml 3 Jan 2005 13:00:32 -0000 1.1 --- Feature-Annotation.xml 11 Mar 2005 03:21:45 -0000 1.2 *************** *** 17,21 **** ! Cognia Corporation
--- 17,21 ---- ! Cognia Corporation
*************** *** 152,158 **** already somewhat familiar with Bioperl and its central Seq and SeqIO objects. The reader is referred to the ! bptutorial, the module documentation, and the ! SeqIO HOWTO for more information on these topics. Here's a bit of code, to summarize: --- 152,158 ---- already somewhat familiar with Bioperl and its central Seq and SeqIO objects. The reader is referred to the ! bptutorial, the module documentation, and the ! SeqIO HOWTO for more information on these topics. Here's a bit of code, to summarize: *************** *** 171,177 **** This object, $seq_object, is actually a ! Bio::Seq::RichSeq object - can a ! PrimarySeq object, the simple parent of all Sequence objects, have a feature or an annotation? No. --- 171,177 ---- This object, $seq_object, is actually a ! Bio::Seq::RichSeq object - can a ! PrimarySeq object, the simple parent of all Sequence objects, have a feature or an annotation? No. *************** *** 238,242 **** feature data is converted into objects, specifically Bio::SeqFeature::Generic objects. How many? In this case 3, one for each of the primary tags. --- 238,242 ---- feature data is converted into objects, specifically Bio::SeqFeature::Generic objects. How many? In this case 3, one for each of the primary tags. *************** *** 248,252 **** than likely it's referring to this same Bio::SeqFeature::Generic object. Think of it as the default SeqFeature object. Now, should you care what kind of object is being made? For the most --- 248,252 ---- than likely it's referring to this same Bio::SeqFeature::Generic object. Think of it as the default SeqFeature object. Now, should you care what kind of object is being made? For the most *************** *** 345,350 **** built to respect the specification for the feature tables agreed upon by Genbank, EMBL, and DDBJ (see Feature ! Table Definition for the details). Check this page if you're interested in a complete listing and description of all the Genbank, EMBL, and DDBJ feature tags. --- 345,350 ---- built to respect the specification for the feature tables agreed upon by Genbank, EMBL, and DDBJ (see Feature ! Table Definition for the details). Check this page if you're interested in a complete listing and description of all the Genbank, EMBL, and DDBJ feature tags. *************** *** 389,393 **** This doesn't return the parent's sequence directly but rather a Bio::PrimarySeq object corresponding to the parent sequence. Now that you have this object you can call its seq() method to get the sequence string, or --- 389,393 ---- This doesn't return the parent's sequence directly but rather a Bio::PrimarySeq object corresponding to the parent sequence. Now that you have this object you can call its seq() method to get the sequence string, or *************** *** 612,616 **** tag, and you'll get more information from the Bio::Species object. --- 612,616 ---- tag, and you'll get more information from the Bio::Species object. *************** *** 645,649 **** suffice. See the documentation on Bio::Species for more information. --- 645,649 ---- suffice. See the documentation on Bio::Species for more information. *************** *** 800,807 **** Annotation::SimpleValue objects, the COMMENT ends up in a Bio::Annotation::Comment object, and references are tranformed into Bio::Annotation::Reference objects. Some of these specialized objects will have specialized methods. Take the Annotation::Reference object, for example: --- 800,807 ---- Annotation::SimpleValue objects, the COMMENT ends up in a Bio::Annotation::Comment object, and references are tranformed into Bio::Annotation::Reference objects. Some of these specialized objects will have specialized methods. Take the Annotation::Reference object, for example: *************** *** 865,869 **** These Bio::Seq::RichSeq objects are created automatically when you use SeqIO to read from EMBL, GenBank, GAME, Chado XML, TIGR XML, Locuslink, BSML, KEGG, and SwissProt sequence --- 865,869 ---- These Bio::Seq::RichSeq objects are created automatically when you use SeqIO to read from EMBL, GenBank, GAME, Chado XML, TIGR XML, Locuslink, BSML, KEGG, and SwissProt sequence *************** *** 985,1030 **** Direct database link to AAA93114 in database GenBankdblinkBio::Annotation::DBLink Value: http://www.ncbi.nlm.nih.gov/UniGene/clust.cgi?ORG=Hs&CID=52931URL Bio::Annotation::SimpleValue Value: 8CHRBio::Annotation::SimpleValue Direct database link to NP_000671 in database RefSeqdblinkBio::Annotation::DBLink Direct database link to SGC35558 in database STSdblinkBio::Annotation::DBLink Comment: Summary: Alpha-1-ARs are members of the GPCR superfamilycommentBio::Annotation::Comment Value: adrenergic, alpha-1A-, receptorOFFICIAL_GENE_NAMEBio::Annotation::SimpleValue Value: ADRA1CALIAS_SYMBOLBio::Annotation::SimpleValue Value: adrenergic, alpha -1A-, receptorALIAS_PROTBio::Annotation::SimpleValue Direct database link to NM_000680 in database RefSeqdblinkBio::Annotation::DBLink Value: ADRA1AOFFICIAL_SYMBOLBio::Annotation::SimpleValue Direct database link to SGC35557 in database STSdblinkBio::Annotation::DBLink Value: 8p21-p11.2MAPBio::Annotation::SimpleValue Direct database link to 104221 in database MIMdblinkBio::Annotation::DBLink Direct database link to D8S2033 in database STSdblinkBio::Annotation::DBLink Direct database link to none in database GenBankdblinkBio::Annotation::DBLink cellular component|integral to plasma membrane|GO:0005887cellular componentBio::Annotation::OntologyTerm Direct database link to Hs.52931 in database UniGenedblinkBio::Annotation::DBLink Direct database link to M11313 in database GenBankdblinkBio::Annotation::DBLink Direct database link to P35348 in database GenBankdblinkBio::Annotation::DBLink --- 985,1030 ---- Direct database link to AAA93114 in database GenBankdblinkBio::Annotation::DBLink Value: http://www.ncbi.nlm.nih.gov/UniGene/clust.cgi?ORG=Hs&CID=52931URL Bio::Annotation::SimpleValue Value: 8CHRBio::Annotation::SimpleValue Direct database link to NP_000671 in database RefSeqdblinkBio::Annotation::DBLink Direct database link to SGC35558 in database STSdblinkBio::Annotation::DBLink Comment: Summary: Alpha-1-ARs are members of the GPCR superfamilycommentBio::Annotation::Comment Value: adrenergic, alpha-1A-, receptorOFFICIAL_GENE_NAMEBio::Annotation::SimpleValue Value: ADRA1CALIAS_SYMBOLBio::Annotation::SimpleValue Value: adrenergic, alpha -1A-, receptorALIAS_PROTBio::Annotation::SimpleValue Direct database link to NM_000680 in database RefSeqdblinkBio::Annotation::DBLink Value: ADRA1AOFFICIAL_SYMBOLBio::Annotation::SimpleValue Direct database link to SGC35557 in database STSdblinkBio::Annotation::DBLink Value: 8p21-p11.2MAPBio::Annotation::SimpleValue Direct database link to 104221 in database MIMdblinkBio::Annotation::DBLink Direct database link to D8S2033 in database STSdblinkBio::Annotation::DBLink Direct database link to none in database GenBankdblinkBio::Annotation::DBLink cellular component|integral to plasma membrane|GO:0005887cellular componentBio::Annotation::OntologyTerm Direct database link to Hs.52931 in database UniGenedblinkBio::Annotation::DBLink Direct database link to M11313 in database GenBankdblinkBio::Annotation::DBLink Direct database link to P35348 in database GenBankdblinkBio::Annotation::DBLink *************** *** 1070,1074 **** already have the data? The Bio::SeqFeature::Generic object is probably the best SeqFeature object for this purpose, in part because of its flexibility. Let's assume we have a sequence that has an --- 1070,1074 ---- already have the data? The Bio::SeqFeature::Generic object is probably the best SeqFeature object for this purpose, in part because of its flexibility. Let's assume we have a sequence that has an *************** *** 1090,1094 **** The SeqFeature::Generic object offers the user a "tag system" for addition of data that's not explicitly accounted for by its methods, that's what the "-tag" is for, above. --- 1090,1094 ---- The SeqFeature::Generic object offers the user a "tag system" for addition of data that's not explicitly accounted for by its methods, that's what the "-tag" is for, above. *************** *** 1197,1202 **** If you would like to learn about representing sequences and features in graphical form take a look at the Graphics ! HOWTO. The documentation for each of the individual SeqFeature, Range, Location and Annotation modules is also very useful, here's a list of them. --- 1197,1202 ---- If you would like to learn about representing sequences and features in graphical form take a look at the Graphics ! HOWTO. The documentation for each of the individual SeqFeature, Range, Location and Annotation modules is also very useful, here's a list of them. *************** *** 1208,1237 **** SeqFeature Modules ! SeqFeatureI.pm ! SeqFeature/AnnotationAdaptor.pm ! SeqFeature/FeaturePair.pm ! SeqFeature/Similarity.pm ! SeqFeature/Generic.pm ! SeqFeature/SimilarityPair.pm ! SeqFeature/PositionProxy.pm ! SeqFeature/Computation.pm ! SeqFeature/Primer.pm ! SeqFeature/Collection.pm ! SeqFeature/CollectionI.pm ! SeqFeature/SiRNA/Pair.pm ! SeqFeature/SiRNA/Oligo.pm ! SeqFeature/Gene/GeneStructure.pm ! SeqFeature/Gene/NC_Feature.pm ! SeqFeature/Gene/Transcript.pm ! SeqFeature/Gene/Exon.pm ! SeqFeature/Gene/GeneStructureI.pm ! SeqFeature/Gene/Poly_A_site.pm ! SeqFeature/Gene/TranscriptI.pm ! SeqFeature/Gene/ExonI.pm ! SeqFeature/Gene/Intron.pm ! SeqFeature/Gene/Promoter.pm ! SeqFeature/Gene/UTR.pm ! SeqFeature/Tools/Unflattener.pm ! SeqFeature/Tools/TypeMapper.pm --- 1208,1237 ---- SeqFeature Modules ! SeqFeatureI.pm ! SeqFeature/AnnotationAdaptor.pm ! SeqFeature/FeaturePair.pm ! SeqFeature/Similarity.pm ! SeqFeature/Generic.pm ! SeqFeature/SimilarityPair.pm ! SeqFeature/PositionProxy.pm ! SeqFeature/Computation.pm ! SeqFeature/Primer.pm ! SeqFeature/Collection.pm ! SeqFeature/CollectionI.pm ! SeqFeature/SiRNA/Pair.pm ! SeqFeature/SiRNA/Oligo.pm ! SeqFeature/Gene/GeneStructure.pm ! SeqFeature/Gene/NC_Feature.pm ! SeqFeature/Gene/Transcript.pm ! SeqFeature/Gene/Exon.pm ! SeqFeature/Gene/GeneStructureI.pm ! SeqFeature/Gene/Poly_A_site.pm ! SeqFeature/Gene/TranscriptI.pm ! SeqFeature/Gene/ExonI.pm ! SeqFeature/Gene/Intron.pm ! SeqFeature/Gene/Promoter.pm ! SeqFeature/Gene/UTR.pm ! SeqFeature/Tools/Unflattener.pm ! SeqFeature/Tools/TypeMapper.pm *************** *** 1240,1256 **** AnnotationI.pm AnnotatableI.pm ! AnnotationCollectionI.pm ! Annotation/AnnotationFactory.pm ! Annotation/Comment.pm ! Annotation/Reference.pm ! Annotation/TypeManager.pm ! Annotation/DBLink.pm ! Annotation/SimpleValue.pm ! Annotation/Collection.pm ! Annotation/OntologyTerm.pm ! Annotation/StructuredValue.pm --- 1240,1256 ---- AnnotationI.pm AnnotatableI.pm ! AnnotationCollectionI.pm ! Annotation/AnnotationFactory.pm ! Annotation/Comment.pm ! Annotation/Reference.pm ! Annotation/TypeManager.pm ! Annotation/DBLink.pm ! Annotation/SimpleValue.pm ! Annotation/Collection.pm ! Annotation/OntologyTerm.pm ! Annotation/StructuredValue.pm *************** *** 1259,1285 **** LocationI.pm LocatableSeq.pm Location/Atomic.pm Location/AvWithinCoordPolicy.pm Location/CoordinatePolicyI.pm Location/Fuzzy.pm Location/FuzzyLocationI.pm Location/NarrowestCoordPolicy.pm Location/Simple.pm Location/Split.pm Location/SplitLocationI.pm Location/WidestCoordPolicy.pm --- 1259,1285 ---- LocationI.pm LocatableSeq.pm Location/Atomic.pm Location/AvWithinCoordPolicy.pm Location/CoordinatePolicyI.pm Location/Fuzzy.pm Location/FuzzyLocationI.pm Location/NarrowestCoordPolicy.pm Location/Simple.pm Location/Split.pm Location/SplitLocationI.pm Location/WidestCoordPolicy.pm *************** *** 1288,1294 **** RangeI.pm Range.pm --- 1288,1294 ---- RangeI.pm Range.pm Index: global.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/global.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** global.xml 3 Jan 2005 00:12:01 -0000 1.1 --- global.xml 11 Mar 2005 03:21:45 -0000 1.2 *************** *** 1,8 **** ! ! ! ! ! ! ! --- 1,8 ---- ! ! ! ! ! ! ! Index: Flat_Databases.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/Flat_Databases.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Flat_Databases.xml 3 Jan 2005 13:00:32 -0000 1.1 --- Flat_Databases.xml 11 Mar 2005 03:21:45 -0000 1.2 *************** *** 17,21 **** ! Cold Spring Harbor Laboratory
--- 17,21 ---- ! Cold Spring Harbor Laboratory
*************** *** 31,35 **** ! Cognia Corporation
brian-at-cognia.com --- 31,35 ---- ! Cognia Corporation
brian-at-cognia.com *************** *** 45,49 **** ! European Bioinformatics Institute
--- 45,49 ---- ! European Bioinformatics Institute
*************** *** 108,112 **** reason to use it is if you want to use the BioSequence Registry system (see the OBDA Access HOWTO at http://bioperl.org/HOWTOs), or if you want to share the same indexed files among scripts written in other languages, such as those written with BioJava or --- 108,112 ---- reason to use it is if you want to use the BioSequence Registry system (see the OBDA Access HOWTO at http://bioperl.org/HOWTOs), or if you want to share the same indexed files among scripts written in other languages, such as those written with BioJava or *************** *** 241,245 **** It is generally the faster of the two, but it requires that the Berkeley DB library (from Linux RPM or from www.sleepycat.com, version 2 or higher) and the Perl BerkeleyDB module be installed on your system. The Perl DB_File module will not work. --- 241,245 ---- It is generally the faster of the two, but it requires that the Berkeley DB library (from Linux RPM or from www.sleepycat.com, version 2 or higher) and the Perl BerkeleyDB module be installed on your system. The Perl DB_File module will not work. *************** *** 444,449 **** For more information on using your indexed flat files please see the ! ! OBDA Access HOWTO. --- 444,449 ---- For more information on using your indexed flat files please see the ! ! OBDA Access HOWTO. Index: OBDA_Access.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/OBDA_Access.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** OBDA_Access.xml 14 Jan 2005 03:00:43 -0000 1.2 --- OBDA_Access.xml 11 Mar 2005 03:21:45 -0000 1.3 *************** *** 16,20 **** ! University of Virginia
--- 16,20 ---- ! University of Virginia
*************** *** 31,35 **** ! Cognia Corporation
brian-at-cognia.com --- 31,35 ---- ! Cognia Corporation
brian-at-cognia.com *************** *** 45,49 **** ! UCSC
schattner@alum.mit.edu --- 45,49 ---- ! UCSC
schattner@alum.mit.edu *************** *** 59,63 **** ! EBI
heikki@ebi.ac.uk --- 59,63 ---- ! EBI
heikki@ebi.ac.uk *************** *** 70,74 **** ! Cold Spring Harbor Laboratory
--- 70,74 ---- ! Cold Spring Harbor Laboratory
*************** *** 159,163 **** databases referred to in the configuration file using a perl script as well as from the command line. The Web site for OBDA is ! obda.open-bio.org. --- 159,163 ---- databases referred to in the configuration file using a perl script as well as from the command line. The Web site for OBDA is ! obda.open-bio.org. *************** *** 416,426 **** flat protocol:Flat ! Databases HOWTO biosql protocol: BioSQL INSTALL (from the biosql-schema package, available at obda.open-bio.org). Download the Biosql tar file to view all the documentation. --- 416,426 ---- flat protocol:Flat ! Databases HOWTO biosql protocol: BioSQL INSTALL (from the biosql-schema package, available at obda.open-bio.org). Download the Biosql tar file to view all the documentation. *************** *** 494,498 **** The returned objects have all the methods defined by Bio::Seq (see the appropriate manual page, online at doc.bioperl.org). In line 5, we call the sequence object's seq() method to fetch and print out the DNA or protein --- 494,498 ---- The returned objects have all the methods defined by Bio::Seq (see the appropriate manual page, online at doc.bioperl.org). In line 5, we call the sequence object's seq() method to fetch and print out the DNA or protein Index: SearchIO.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/SearchIO.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** SearchIO.xml 14 Jan 2005 03:00:43 -0000 1.2 --- SearchIO.xml 11 Mar 2005 03:21:45 -0000 1.3 *************** *** 20,28 **** ! Duke ! University ! University Program in Genetics ! Center for ! Genome Technology
Duke University Medical Center --- 20,28 ---- ! Duke ! University ! University Program in Genetics ! Center for ! Genome Technology
Duke University Medical Center *************** *** 45,49 **** ! Cognia Corporation
NYC, NY 10022 --- 45,49 ---- ! Cognia Corporation
NYC, NY 10022 *************** *** 177,189 **** from objects which will hold the information produced. In the same manner that the ! Bio::SeqIO module is used to parse different file formats and produces objects which are ! Bio::PrimarySeqI compliant, we have written ! Bio::SearchIO to produce the Bio::Search objects. Sequences are a little less complicated so there is only one primary object (Bio::PrimarySeqI) which Search --- 177,189 ---- from objects which will hold the information produced. In the same manner that the ! Bio::SeqIO module is used to parse different file formats and produces objects which are ! Bio::PrimarySeqI compliant, we have written ! Bio::SearchIO to produce the Bio::Search objects. Sequences are a little less complicated so there is only one primary object (Bio::PrimarySeqI) which Search *************** *** 191,207 **** processed in a file: Bio::Search::Result::ResultI (top level results), Bio::Search::Hit::HitI (hits) and ! Bio::Search::HSP::HSPI (HSPs). The ! Bio::SearchIO object is then a factory which produces Bio::Search::Result::ResultI objects and the Bio::Search::Result::ResultI objects contain information about the query, the database searched, and the full collection of Hits found for the query. --- 191,207 ---- processed in a file: Bio::Search::Result::ResultI (top level results), Bio::Search::Hit::HitI (hits) and ! Bio::Search::HSP::HSPI (HSPs). The ! Bio::SearchIO object is then a factory which produces Bio::Search::Result::ResultI objects and the Bio::Search::Result::ResultI objects contain information about the query, the database searched, and the full collection of Hits found for the query. *************** *** 761,766 **** you'd parsed BLAST output you could use the get_aln() method, retrieve a ! Bio::SimpleAlign object and use it like this: use Bio::AlignIO; --- 761,766 ---- you'd parsed BLAST output you could use the get_aln() method, retrieve a ! Bio::SimpleAlign object and use it like this: use Bio::AlignIO; *************** *** 826,830 **** many Bioperl modules involved in gene annotation (for more on GFF see http://www.sanger.ac.uk/Software/formats/GFF/GFF_Spec.shtml). --- 826,830 ---- many Bioperl modules involved in gene annotation (for more on GFF see http://www.sanger.ac.uk/Software/formats/GFF/GFF_Spec.shtml). *************** *** 842,846 **** arguments or returned values for all the SearchIO methods. The best place to explore any method in detail is ! http://doc.bioperl.org which provides the HTML versions of the Perl POD (Plain Old Documentation) that is embedded in every well-written Perl --- 842,846 ---- arguments or returned values for all the SearchIO methods. The best place to explore any method in detail is ! http://doc.bioperl.org which provides the HTML versions of the Perl POD (Plain Old Documentation) that is embedded in every well-written Perl *************** *** 933,938 **** implemented event-based parsing for ! Bio::SearchIO. The Bio::SearchIO is just the front-end to this process, in fact the processing of these reports is done by different modules in the --- 933,938 ---- implemented event-based parsing for ! Bio::SearchIO. The Bio::SearchIO is just the front-end to this process, in fact the processing of these reports is done by different modules in the *************** *** 945,949 **** but we'll save that for later. If you don't have the distribution handy you can navigate this at the bioperl CVS web page. --- 945,949 ---- but we'll save that for later. If you don't have the distribution handy you can navigate this at the bioperl CVS web page. *************** *** 971,979 **** to Hits and which ones are related to HSPs. The listener in our architecture is the Bio::SearchIO::SearchResultEventBuilder. This object is attached as a listener through the ! Bio::SearchIO method add_EventListener. In fact you could have multiple event listeners and they could do different things. In our case we --- 971,979 ---- to Hits and which ones are related to HSPs. The listener in our architecture is the Bio::SearchIO::SearchResultEventBuilder. This object is attached as a listener through the ! Bio::SearchIO method add_EventListener. In fact you could have multiple event listeners and they could do different things. In our case we *************** *** 1056,1061 **** The framework for ! Bio::SearchIO is just a starting point for parsing these reports and creating objects which represent the information. If you would like to create your own set of objects which extend the --- 1056,1061 ---- The framework for ! Bio::SearchIO is just a starting point for parsing these reports and creating objects which represent the information. If you would like to create your own set of objects which extend the *************** *** 1082,1091 **** make sure it inherits from the base ! Bio::Search::HSP::HSPI object. Additionally unless you want to reimplement all the initialization state in the current Bio::Search::HSP::GenericHSP you should just plan to extend that object. You need to follow the chained constructor system that we have set up so that the arguments are --- 1082,1091 ---- make sure it inherits from the base ! Bio::Search::HSP::HSPI object. Additionally unless you want to reimplement all the initialization state in the current Bio::Search::HSP::GenericHSP you should just plan to extend that object. You need to follow the chained constructor system that we have set up so that the arguments are *************** *** 1227,1345 **** ! SearchIO.pm SearchIO/axt.pm SearchIO/blast.pm SearchIO/blasttable.pm SearchIO/blastxml.pm SearchIO/EventHandlerI.pm SearchIO/exonerate.pm SearchIO/fasta.pm SearchIO/FastHitEventBuilder.pm SearchIO/hmmer.pm SearchIO/IteratedSearchResultEventBuilder.pm SearchIO/megablast.pm SearchIO/psl.pm SearchIO/SearchResultEventBuilder.pm SearchIO/SearchWriterI.pm SearchIO/sim4.pm SearchIO/waba.pm SearchIO/wise.pm SearchIO/Writer/BSMLResultWriter.pm SearchIO/Writer/GbrowseGFF.pm SearchIO/Writer/HitTableWriter.pm SearchIO/Writer/HSPTableWriter.pm SearchIO/Writer/HTMLResultWriter.pm SearchIO/Writer/ResultTableWriter.pm SearchIO/Writer/TextResultWriter.pm Search/BlastUtils.pm Search/DatabaseI.pm Search/GenericDatabase.pm Search/Hit/BlastHit.pm Search/Hit/Fasta.pm Search/Hit/GenericHit.html">Search/Hit/GenericHit.pm Search/Hit/HitFactory.pm Search/Hit/HitI.pm Search/Hit/HMMERHit.pm Search/Hit/PsiBlastHit.pm Search/HSP/BlastHSP.pm Search/HSP/FastaHSP.pm Search/HSP/GenericHSP.pm Search/HSP/HMMERHSP.pm Search/HSP/HSPFactory.pm Search/HSP/HSPI.pm Search/HSP/PsiBlastHSP.pm Search/HSP/PSLHSP.pm Search/HSP/WABAHSP.pm Search/Iteration/GenericIteration.pm Search/Iteration/IterationI Search/Processor.pm Search/Result/BlastResult.pm Search/Result/GenericResult.pm Search/Result/HMMERResult.pm Search/Result/ResultFactory.pm Search/Result/ResultI.pm Search/Result/WABAResult.pm Search/SearchUtils.pm Search/BlastStatistics.pm Search/GenericStatistics.pm Search/StatisticsI.pm --- 1227,1345 ---- ! SearchIO.pm SearchIO/axt.pm SearchIO/blast.pm SearchIO/blasttable.pm SearchIO/blastxml.pm SearchIO/EventHandlerI.pm SearchIO/exonerate.pm SearchIO/fasta.pm SearchIO/FastHitEventBuilder.pm SearchIO/hmmer.pm SearchIO/IteratedSearchResultEventBuilder.pm SearchIO/megablast.pm SearchIO/psl.pm SearchIO/SearchResultEventBuilder.pm SearchIO/SearchWriterI.pm SearchIO/sim4.pm SearchIO/waba.pm SearchIO/wise.pm SearchIO/Writer/BSMLResultWriter.pm SearchIO/Writer/GbrowseGFF.pm SearchIO/Writer/HitTableWriter.pm SearchIO/Writer/HSPTableWriter.pm SearchIO/Writer/HTMLResultWriter.pm SearchIO/Writer/ResultTableWriter.pm SearchIO/Writer/TextResultWriter.pm Search/BlastUtils.pm Search/DatabaseI.pm Search/GenericDatabase.pm Search/Hit/BlastHit.pm Search/Hit/Fasta.pm Search/Hit/GenericHit.html">Search/Hit/GenericHit.pm Search/Hit/HitFactory.pm Search/Hit/HitI.pm Search/Hit/HMMERHit.pm Search/Hit/PsiBlastHit.pm Search/HSP/BlastHSP.pm Search/HSP/FastaHSP.pm Search/HSP/GenericHSP.pm Search/HSP/HMMERHSP.pm Search/HSP/HSPFactory.pm Search/HSP/HSPI.pm Search/HSP/PsiBlastHSP.pm Search/HSP/PSLHSP.pm Search/HSP/WABAHSP.pm Search/Iteration/GenericIteration.pm Search/Iteration/IterationI Search/Processor.pm Search/Result/BlastResult.pm Search/Result/GenericResult.pm Search/Result/HMMERResult.pm Search/Result/ResultFactory.pm Search/Result/ResultI.pm Search/Result/WABAResult.pm Search/SearchUtils.pm Search/BlastStatistics.pm Search/GenericStatistics.pm Search/StatisticsI.pm Index: Trees.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/Trees.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Trees.xml 3 Jan 2005 13:00:33 -0000 1.1 --- Trees.xml 11 Mar 2005 03:21:45 -0000 1.2 *************** *** 466,494 **** Related Modules ! Bio/TreeIO.pm ! Bio/Tree/Tree.pm ! Bio/Align/DNAStatistics.pm ! Bio/Align/ProteinStatistics.pm ! Bio/Align/Utilities.pm ! Bio/Matrix/PhylipDist.pm ! Bio/PopGen/Simulation/Coalescent.pm ! Bio/SimpleAlign.pm ! Bio/Tree/DistanceFactory.pm ! Bio/Tree/Node.pm ! Bio/Tree/RandomFactory.pm ! Bio/Tree/TreeI.pm ! Bio/Tree/AlleleNode.pm ! Bio/Tree/NodeI.pm ! Bio/Tree/NodeNHX.pm ! Bio/Tree/TreeFunctionsI.pm ! Bio/Tree/Statistics.pm ! Bio/TreeIO/newick.pm ! Bio/TreeIO/nexus.pm ! Bio/TreeIO/nhx.pm ! Bio/TreeIO/pag.pm ! Bio/TreeIO/svggraph.pm ! Bio/TreeIO/lintree.pm ! Bio/TreeIO/tabtree.pm ! Bio/TreeIO/TreeEventBuilder.pm --- 466,494 ---- Related Modules ! Bio/TreeIO.pm ! Bio/Tree/Tree.pm ! Bio/Align/DNAStatistics.pm ! Bio/Align/ProteinStatistics.pm ! Bio/Align/Utilities.pm ! Bio/Matrix/PhylipDist.pm ! Bio/PopGen/Simulation/Coalescent.pm ! Bio/SimpleAlign.pm ! Bio/Tree/DistanceFactory.pm ! Bio/Tree/Node.pm ! Bio/Tree/RandomFactory.pm ! Bio/Tree/TreeI.pm ! Bio/Tree/AlleleNode.pm ! Bio/Tree/NodeI.pm ! Bio/Tree/NodeNHX.pm ! Bio/Tree/TreeFunctionsI.pm ! Bio/Tree/Statistics.pm ! Bio/TreeIO/newick.pm ! Bio/TreeIO/nexus.pm ! Bio/TreeIO/nhx.pm ! Bio/TreeIO/pag.pm ! Bio/TreeIO/svggraph.pm ! Bio/TreeIO/lintree.pm ! Bio/TreeIO/tabtree.pm ! Bio/TreeIO/TreeEventBuilder.pm Index: PopGen.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/PopGen.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** PopGen.xml 6 Mar 2005 15:05:12 -0000 1.3 --- PopGen.xml 11 Mar 2005 03:21:45 -0000 1.4 *************** *** 8,144 **** ] > !
! ! Population Genetics in BioPerl HOWTO ! ! Jason ! Stajich ! ! Bioperl Core Developer [...1101 lines suppressed...] ! Nicole ! Soranzo ! ! David ! B ! Goldstein ! ! Greg ! A ! Wray ! ! ! Current Biology ! 2003 13(23):2118-23 ! ! ! !
! \ No newline at end of file Index: Beginners.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/Beginners.xml,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** Beginners.xml 22 Feb 2005 23:48:11 -0000 1.29 --- Beginners.xml 11 Mar 2005 03:21:45 -0000 1.30 *************** *** 24,29 **** ! Cognia ! Corporation
--- 24,29 ---- ! Cognia ! Corporation
*************** *** 40,44 **** -
--- 40,43 ---- *************** *** 121,125 **** This HOWTO does not discuss a very nice module that's designed for beginners, ! Bio::Perl. The reason is that though this is an excellent introductory tool, it is not object-oriented and can't be extended. What we're --- 120,124 ---- This HOWTO does not discuss a very nice module that's designed for beginners, ! Bio::Perl. The reason is that though this is an excellent introductory tool, it is not object-oriented and can't be extended. What we're *************** *** 229,234 **** You should also read the instructions for ! Unix installation or ! Windows installation. Many of the letters to the the bioperl-l mailing list concern problems with installation, and there is a set of concerns that come up repeatedly: --- 228,233 ---- You should also read the instructions for ! Unix installation or ! Windows installation. Many of the letters to the the bioperl-l mailing list concern problems with installation, and there is a set of concerns that come up repeatedly: *************** *** 245,249 **** all of these accessory modules. See the INSTALL.WIN file for more information. --- 244,248 ---- all of these accessory modules. See the INSTALL.WIN file for more information. *************** *** 258,262 **** module by hand. See INSTALL for details. --- 257,261 ---- module by hand. See INSTALL for details. *************** *** 340,348 **** ! Learning Perl is the most frequently cited beginner's book. ! Perl in a Nutshell is also good. Not much in the way of examples, but covers many topics succintly. --- 339,347 ---- ! Learning Perl is the most frequently cited beginner's book. ! Perl in a Nutshell is also good. Not much in the way of examples, but covers many topics succintly. *************** *** 478,488 **** We will use this Bio::Seq module to create a ! Bio::Seq object. The ! Bio::Seq module is one of the central modules in Bioperl. The analogous ! Bio::Seq object, or "Sequence object", or "Seq object", is ubiquitous in Bioperl, it contains a single sequence and associated names, identifiers, and --- 477,487 ---- We will use this Bio::Seq module to create a ! Bio::Seq object. The ! Bio::Seq module is one of the central modules in Bioperl. The analogous ! Bio::Seq object, or "Sequence object", or "Seq object", is ubiquitous in Bioperl, it contains a single sequence and associated names, identifiers, and *************** *** 505,509 **** ! Bio::Seq objects can be created manually, as above, but they're also create automatically in many operations in Bioperl, for example when alignment files or database --- 504,508 ---- ! Bio::Seq objects can be created manually, as above, but they're also create automatically in many operations in Bioperl, for example when alignment files or database *************** *** 535,543 **** specific methods taken from the module or modules that were used to create it. For example, the ! Bio::Seq module can call a method named seq() that will print out the sequence of ! Bio::Seq objects. You could use it like this: --- 534,542 ---- specific methods taken from the module or modules that were used to create it. For example, the ! Bio::Seq module can call a method named seq() that will print out the sequence of ! Bio::Seq objects. You could use it like this: *************** *** 599,609 **** Input-Output. By using ! Bio::SeqIO in this manner you will be able to get input and make output for all of the sequence file formats supported by Bioperl ! (the SeqIO HOWTO has a complete list of supported formats). The way you create Bio::SeqIO objects is very similar to the way we used new() to create a ! Bio::Seq, or sequence, object: --- 598,608 ---- Input-Output. By using ! Bio::SeqIO in this manner you will be able to get input and make output for all of the sequence file formats supported by Bioperl ! (the SeqIO HOWTO has a complete list of supported formats). The way you create Bio::SeqIO objects is very similar to the way we used new() to create a ! Bio::Seq, or sequence, object: *************** *** 698,702 **** One beginner's mistake is to not use ! Bio::SeqIO when working with sequence files. This is understandable in some respects. You may have read about Perl's open --- 697,701 ---- One beginner's mistake is to not use ! Bio::SeqIO when working with sequence files. This is understandable in some respects. You may have read about Perl's open *************** *** 749,753 **** Here we've used the next_seq() method of the ! Bio::SeqIO object. When you use, or call, next_seq() the SeqIO object will get the next available sequence, in this case --- 748,752 ---- Here we've used the next_seq() method of the ! Bio::SeqIO object. When you use, or call, next_seq() the SeqIO object will get the next available sequence, in this case *************** *** 785,789 **** try to determine the format from the file suffix or extension (and a list of the file extensions is in the ! SeqIO HOWTO). In fact, the suffix "fa" is one that SeqIO understands, so "-format" is unnecessary above. Without a known suffix SeqIO will attempt to guess the format based on the --- 784,788 ---- try to determine the format from the file suffix or extension (and a list of the file extensions is in the ! SeqIO HOWTO). In fact, the suffix "fa" is one that SeqIO understands, so "-format" is unnecessary above. Without a known suffix SeqIO will attempt to guess the format based on the *************** *** 848,852 **** this. This next example attempts to do something "biological", using the module ! Bio::DB::Query::GenBank. Want all Arabidopsis topoisomerases from Genbank Nucleotide? This would be a reasonable first attempt: --- 847,851 ---- this. This next example attempts to do something "biological", using the module ! Bio::DB::Query::GenBank. Want all Arabidopsis topoisomerases from Genbank Nucleotide? This would be a reasonable first attempt: *************** *** 916,920 **** You can find detailed information on Genbank's query fields ! here. --- 915,919 ---- You can find detailed information on Genbank's query fields ! here. *************** *** 1035,1039 **** See Bio::PrimarySeqI for more --- 1034,1038 ---- See Bio::PrimarySeqI for more *************** *** 1044,1048 **** See Bio::Species for more --- 1043,1047 ---- See Bio::Species for more *************** *** 1088,1092 **** tangent but if you'd like to learn about Features and Annotations see the relevant ! HOWTO. The methods related to this topic are shown below. --- 1087,1091 ---- tangent but if you'd like to learn about Features and Annotations see the relevant ! HOWTO. The methods related to this topic are shown below. *************** *** 1304,1308 **** what Bioperl calls Features and Annotations, see the Feature and Annotation HOWTO if you'd like to learn more about this. Second, a few of the methods don't return anything, like --- 1303,1307 ---- what Bioperl calls Features and Annotations, see the Feature and Annotation HOWTO if you'd like to learn more about this. Second, a few of the methods don't return anything, like *************** *** 1552,1556 **** object doesn't supply, and it's stored in Annotation objects. See the Feature and Annotation HOWTO for more. --- 1551,1555 ---- object doesn't supply, and it's stored in Annotation objects. See the Feature and Annotation HOWTO for more. *************** *** 1565,1569 **** analytical program is BLAST, so let's use it as an example. First you'll need to get BLAST, also known as blastall, installed on your machine --- 1564,1568 ---- analytical program is BLAST, so let's use it as an example. First you'll need to get BLAST, also known as blastall, installed on your machine *************** *** 1574,1578 **** As usual, we start by choosing a module to use, in this case Bio::Tools::Run::StandAloneBlast. You stipulate the parameters used by the blastall program by populating an array, it's called --- 1573,1577 ---- As usual, we start by choosing a module to use, in this case Bio::Tools::Run::StandAloneBlast. You stipulate the parameters used by the blastall program by populating an array, it's called *************** *** 1624,1628 **** result object, $result_obj, come from the SearchIO modules. The ! SearchIO HOWTO will tell you all about using these objects to extract useful data from your BLAST analyses. --- 1623,1627 ---- result object, $result_obj, come from the SearchIO modules. The ! SearchIO HOWTO will tell you all about using these objects to extract useful data from your BLAST analyses. *************** *** 1630,1642 **** Sometimes you'll see errors when you try to use Bio::Tools::Run::StandAloneBlast that have nothing to do with Bioperl. Make sure that BLAST is set up properly and running before you attempt to script it using Bio::Tools::Run::StandAloneBlast. There are some notes on setting up BLAST in the INSTALL file. --- 1629,1641 ---- Sometimes you'll see errors when you try to use Bio::Tools::Run::StandAloneBlast that have nothing to do with Bioperl. Make sure that BLAST is set up properly and running before you attempt to script it using Bio::Tools::Run::StandAloneBlast. There are some notes on setting up BLAST in the INSTALL file. *************** *** 1650,1654 **** bioperl-run package on the download page. --- 1649,1653 ---- bioperl-run package on the download page. *************** *** 1768,1772 **** using Bio::Index::Fasta's id_parser method, which accepts the name of a function as an argument where that function --- 1767,1771 ---- using Bio::Index::Fasta's id_parser method, which accepts the name of a function as an argument where that function *************** *** 1819,1823 **** The bptutorial gives a good overview of many different topics. Few topics are covered in detail but many --- 1818,1822 ---- The bptutorial gives a good overview of many different topics. Few topics are covered in detail but many *************** *** 1825,1830 **** ! The ! HOWTOs. Each one covers a topic in some detail, but there are certainly some HOWTOs that are missing that we would like to see written. Would you like to become an --- 1824,1829 ---- ! The ! HOWTOs. Each one covers a topic in some detail, but there are certainly some HOWTOs that are missing that we would like to see written. Would you like to become an *************** *** 1833,1837 **** The module documentation. Each module is documented, but the quality and quantity varies by module. --- 1832,1836 ---- The module documentation. Each module is documented, but the quality and quantity varies by module. *************** *** 1845,1849 **** ! User-contributed documentation. There's some very good material here. --- 1844,1848 ---- ! User-contributed documentation. There's some very good material here. *************** *** 1978,1987 **** ! Object Oriented Perl ! The Bioperl design documentation, for anyone who'd like to write their own modules. --- 1977,1986 ---- ! Object Oriented Perl ! The Bioperl design documentation, for anyone who'd like to write their own modules. Index: entities.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/entities.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** entities.xml 3 Jan 2005 00:12:01 -0000 1.1 --- entities.xml 11 Mar 2005 03:21:45 -0000 1.2 *************** *** 1,25 **** ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! --- 1,25 ---- ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Index: SeqIO.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/SeqIO.xml,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** SeqIO.xml 3 Jan 2005 13:00:33 -0000 1.6 --- SeqIO.xml 11 Mar 2005 03:21:45 -0000 1.7 *************** *** 94,99 **** sub-sequence, usually with some biological property - see the ! Feature-Annotation HOWTO for more information). When given fasta SeqIO creates a Bio::Seq object, a more spare object than the Bio::Seq::RichSeq object that's created when SeqIO is given formats --- 94,99 ---- sub-sequence, usually with some biological property - see the ! Feature-Annotation HOWTO for more information). When given fasta SeqIO creates a Bio::Seq object, a more spare object than the Bio::Seq::RichSeq object that's created when SeqIO is given formats Index: PAML.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/PAML.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** PAML.xml 3 Jan 2005 13:00:32 -0000 1.1 --- PAML.xml 11 Mar 2005 03:21:45 -0000 1.2 *************** *** 17,21 **** ! University of Virginia
--- 17,21 ---- ! University of Virginia
*************** *** 28,39 **** Stajich ! Duke ! University ! University Program in ! Genetics ! Center for ! Genome Technology
Duke University Medical Center --- 28,39 ---- Stajich ! Duke ! University ! University Program in ! Genetics ! Center for ! Genome Technology
Duke University Medical Center From bosborne at pub.open-bio.org Tue Mar 15 07:49:09 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Tue Mar 15 07:34:18 2005 Subject: [Bioperl-guts-l] bioperl-live/doc/howto/sgml Feature-Annotation.xml, 1.3, 1.4 Message-ID: <200503151249.j2FCn9DT003540@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/doc/howto/sgml In directory pub.open-bio.org:/tmp/cvs-serv3531 Modified Files: Feature-Annotation.xml Log Message: Edits Index: Feature-Annotation.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/Feature-Annotation.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Feature-Annotation.xml 14 Mar 2005 12:53:53 -0000 1.3 --- Feature-Annotation.xml 15 Mar 2005 12:49:07 -0000 1.4 *************** *** 17,21 **** ! Cognia Corporation
--- 17,22 ---- ! ! Cognia Corporation
*************** *** 167,171 **** ! --- 168,172 ---- ! *************** *** 227,239 **** Features in Bioperl are accessed using their tags, either a ! "primary tag" or a plain "tag". Examples of primary tags in this ! text are "source", "gene", and "CDS". Plain tags in this table include ! "organism" (/organism="Homo sapiens"), "note" ! (/note="ND"), ! "db_xref" (/db_xref="taxon:9606"), and "translation" ! (/translation="MRKHVL...HCEECNS"). ! When a Genbank file like this is parsed the feature data is converted into objects, specifically Features in Bioperl are accessed using their tags, either a ! "primary tag" or a plain "tag". Examples of primary tags and ! tags in this Genbank entry are shown below. You can see that ! in this case the primary tag is a means to access the tags ! and it's the tags that are associated with the data from ! the file. ! ! ! ! ! Tag Examples ! ! ! Tag nameTag type ! Tag value ! ! ! ! sourceprimary tag ! ! ! CDSprimary tag ! ! ! geneprimary tag ! ! ! organismtagHomo sapiens ! ! ! notetagND ! ! ! protein_idtagNP_000257.1 ! ! ! translationtagMRKHVL...HCEECNS ! ! ! !
+ + ! When a Genbank file like the one above is parsed the feature data is converted into objects, specifically ! By the way, how does one know what kind of object one has in hand? Try ! something like: ! print ref($seq_object); # results in "Bio::Seq::RichSeq" ! --- 294,303 ---- ! By the way, how does one know what kind of object one has in hand? Try ! something like: ! print ref($seq_object); # results in "Bio::Seq::RichSeq" ! *************** *** 273,281 **** look something like this: ! foreach my $feat_object ($seq_object->get_SeqFeatures) { print "primary tag: ", $feat_object->primary_tag, "\n"; ! foreach my $tag ($feat_object->get_all_tags) { print " tag: ", $tag, "\n"; ! foreach my $value ($feat_object->get_tag_values($tag)) { print " value: ", $value, "\n"; } --- 310,318 ---- look something like this: ! for my $feat_object ($seq_object->get_SeqFeatures) { print "primary tag: ", $feat_object->primary_tag, "\n"; ! for my $tag ($feat_object->get_all_tags) { print " tag: ", $tag, "\n"; ! for my $value ($feat_object->get_tag_values($tag)) { print " value: ", $value, "\n"; } *************** *** 284,288 **** ! This bit would print out something like: --- 321,326 ---- ! ! This bit would print out something like: *************** *** 326,330 **** ! foreach my $feat_object ($seq_object->get_SeqFeatures) { push @ids,$feat_object->get_tag_values("db_xref") if ($feat_object->has_tag("db_xref")); --- 364,368 ---- ! for my $feat_object ($seq_object->get_SeqFeatures) { push @ids,$feat_object->get_tag_values("db_xref") if ($feat_object->has_tag("db_xref")); *************** *** 335,339 **** ! Make sure to include that "if ($feat_object->has_tag("<tag>"))" part, otherwise you'll get errors when the feature does not have the tag you're requesting. --- 373,377 ---- ! Make sure to include that if ($feat_object->has_tag("<tag>")) part, otherwise you'll get errors when the feature does not have the tag you're requesting. *************** *** 352,356 **** ! Despite this specification some non-standard feature descriptors have crept into Genbank, like "bond". When the Bioperl Genbank parser encounters a non-standard --- 390,394 ---- ! Despite this specification some non-standard feature tags have crept into Genbank, like "bond". When the Bioperl Genbank parser encounters a non-standard *************** *** 377,382 **** One commonly asked question is "How do I get the sequence of a ! SeqFeature?" The answer is "it depends on what you're looking ! for". If you'd like the sequence of the parent, the sequence object that the SeqFeature is associated with, then use entire_seq(): --- 415,420 ---- One commonly asked question is "How do I get the sequence of a ! SeqFeature?" The answer is "It depends on what you're looking ! for." If you'd like the sequence of the parent, the sequence object that the SeqFeature is associated with, then use entire_seq(): *************** *** 400,403 **** --- 438,442 ---- + There are 2 other useful methods, seq() and *************** *** 423,450 **** are the methods and the corresponding example coordinates: ! Sequence retrieval methods ! ! ! MethodCoordinates ! ! ! ! entire_seq()1..177 ! ! ! seq()103..157 ! ! ! spliced_seq()103..111,121..157 ! ! !
It's not unusual for a Genbank file to have multiple CDS or gene ! features (and recall that 'CDS' or 'gene' are common primary tags in Genbank format), each with a number of tags, like 'note', 'protein_id', or 'product'. How can we get, say, the nucleotide sequences and gene --- 462,491 ---- are the methods and the corresponding example coordinates: + ! Sequence retrieval methods ! ! ! MethodCoordinates ! ! ! ! entire_seq()1..177 ! ! ! seq()103..157 ! ! ! spliced_seq()103..111,121..157 ! ! !
+ It's not unusual for a Genbank file to have multiple CDS or gene ! features (and recall that 'CDS' and 'gene' are common primary tags in Genbank format), each with a number of tags, like 'note', 'protein_id', or 'product'. How can we get, say, the nucleotide sequences and gene *************** *** 459,469 **** my $seq_object = $seqio_object->next_seq; ! foreach my $feat_object ($seq_object->get_SeqFeatures) { if ($feat_object->primary_tag eq "CDS") { print $feat_object->spliced_seq->seq,"\n"; # e.g. 'ATTATTTTCGCTCGCTTCTCGCGCTTTTTGAGATAAGGTCGCGT...' if ($feat->has_tag('gene')) { ! foreach my $val ($feat->get_tag_values('gene')){ ! print "gene: ",$val,"\n"; # e.g. 'NDP', from a line like '/gene="NDP"' } --- 500,510 ---- my $seq_object = $seqio_object->next_seq; ! for my $feat_object ($seq_object->get_SeqFeatures) { if ($feat_object->primary_tag eq "CDS") { print $feat_object->spliced_seq->seq,"\n"; # e.g. 'ATTATTTTCGCTCGCTTCTCGCGCTTTTTGAGATAAGGTCGCGT...' if ($feat->has_tag('gene')) { ! for my $val ($feat->get_tag_values('gene')){ ! print "gene: ",$val,"\n"; # e.g. 'NDP', from a line like '/gene="NDP"' } *************** *** 571,575 **** # polyA_signal 1811..1815 ! # /gene="NDP" my $start = $feat_object->location->start; my $end = $feat_object->location->end; --- 612,616 ---- # polyA_signal 1811..1815 ! # /gene="NDP" my $start = $feat_object->location->start; my $end = $feat_object->location->end; *************** *** 577,581 **** ! By now you know that the location() method returns a Location object - this object has end() and start() methods. --- 618,622 ---- ! By now you've figured out that the location() method returns a Location object - this object has end() and start() methods. *************** *** 591,598 **** ! foreach my $feature ($seqobj->top_SeqFeatures){ if ( $feature->location->isa('Bio::Location::SplitLocationI') && $feature->primary_tag eq 'CDS' ) { ! foreach my $location ( $feature->location->sub_Location ) { print $location->start . ".." . $location->end . "\n"; } --- 632,639 ---- ! for my $feature ($seqobj->top_SeqFeatures){ if ( $feature->location->isa('Bio::Location::SplitLocationI') && $feature->primary_tag eq 'CDS' ) { ! for my $location ( $feature->location->sub_Location ) { print $location->start . ".." . $location->end . "\n"; } *************** *** 671,677 **** ! foreach my $key ( $anno_collection->get_all_annotation_keys ) { my @annotations = $anno_collection->get_Annotations($key); ! foreach my $value ( @annotations ) { print "tagname : ", $value->tagname, "\n"; # $value is an Bio::Annotation, and has an "as_text" method --- 712,718 ---- ! for my $key ( $anno_collection->get_all_annotation_keys ) { my @annotations = $anno_collection->get_Annotations($key); ! for my $value ( @annotations ) { print "tagname : ", $value->tagname, "\n"; # $value is an Bio::Annotation, and has an "as_text" method *************** *** 777,780 **** --- 818,822 ---- + Which yields: *************** *** 808,811 **** --- 850,854 ---- Annotation::Reference object, for example: + *************** *** 815,818 **** --- 858,862 ---- + There's also title(), *************** *** 950,953 **** --- 994,998 ---- + First collect all the annotations: *************** *** 955,964 **** ! use Bio::SeqIO; ! my @annotations = Bio::SeqIO->new(-file => "148.ll", -format => "locuslink")-> next_seq->annotation->get_Annotations; And from this array of Annotations let's extract a hash containing --- 1000,1010 ---- ! use Bio::SeqIO; ! my @annotations = Bio::SeqIO->new(-file => "148.ll", -format => "locuslink")-> next_seq->annotation->get_Annotations; + And from this array of Annotations let's extract a hash containing *************** *** 968,974 **** ! my %tagname_type = map {$_->as_text,($_->tagname . " " . ref($_)) } @annotations; The contents of the %tagname_type hash will --- 1014,1022 ---- ! my %tagname_type = map {$_->as_text,($_->tagname . " " . ref($_)) } ! @annotations; + The contents of the %tagname_type hash will *************** *** 978,989 **** ! Locuslink Annotations ! ! ! as_text()tagname() ! ref() ! ! ! Direct database link to AAA93114 in database GenBankdblinkBio::Annotation::DBLinkValue: --- 1026,1037 ----
! Locuslink Annotations ! ! ! as_text()tagname() ! ref() ! ! ! Direct database link to AAA93114 in database GenBankdblinkBio::Annotation::DBLinkValue: *************** *** 1028,1033 **** Direct database link to P35348 in database GenBankdblinkBio::Annotation::DBLink ! !
--- 1076,1081 ---- Direct database link to P35348 in database GenBankdblinkBio::Annotation::DBLink ! !
*************** *** 1047,1053 **** ! @term_annotations = map { $_->isa("Bio::Ontology::TermI"); } $seq_object->get_Annotations(); To completely parse these sequence formats you may also need to --- 1095,1103 ---- ! @term_annotations = map { $_->isa("Bio::Ontology::TermI"); } ! $seq_object->get_Annotations(); + To completely parse these sequence formats you may also need to *************** *** 1076,1085 **** interesting sub-sequence, going from position 10 to 22. use Bio::SeqFeature::Generic; ! # create the feature and add additional data while initializing, ! # an author and a note my $feat = new Bio::SeqFeature::Generic(-start => 10, -end => 22, --- 1126,1135 ---- interesting sub-sequence, going from position 10 to 22. + use Bio::SeqFeature::Generic; ! # create the feature with some data, evidence and a note my $feat = new Bio::SeqFeature::Generic(-start => 10, -end => 22, *************** *** 1089,1092 **** --- 1139,1143 ---- + The + The add_SeqFeature() method will also accept an array *************** *** 1155,1158 **** --- 1207,1211 ----
+ Now let's examine what we've created by writing the contents of *************** *** 1168,1171 **** --- 1221,1225 ----
+ Voila! From matsallac at pub.open-bio.org Tue Mar 15 11:43:40 2005 From: matsallac at pub.open-bio.org (Chad Matsalla) Date: Tue Mar 15 11:28:26 2005 Subject: [Bioperl-guts-l] bioperl-live/t primer3.t,1.6,1.7 Message-ID: <200503151643.j2FGheDT004377@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/t In directory pub.open-bio.org:/tmp/cvs-serv4368/t Modified Files: primer3.t Log Message: Added some additional tests to primer3.t. I hope that is all. Index: primer3.t =================================================================== RCS file: /home/repository/bioperl/bioperl-live/t/primer3.t,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** primer3.t 15 Jul 2003 01:21:16 -0000 1.6 --- primer3.t 15 Mar 2005 16:43:38 -0000 1.7 *************** *** 3,8 **** --- 3,12 ---- # test for Bio::Tools::Primer3.pm # written by Rob Edwards + # and Chad Matsalla use strict; + use Dumpvalue(); + my $dumper = new Dumpvalue(); + use constant NUMTESTS => 10; *************** *** 31,33 **** --- 35,51 ---- ok $primer=$p3->next_primer; ok ref($primer) eq "Bio::Seq::PrimedSeq", 1, "reference for primer stream is not right"; + # print("This is the primer object: ($primer)\n"); + # get the left primer + my $left_primer = $primer->get_primer('left'); + # print("This is the left primer object: ($left_primer)\n"); + # get the sequence for that primer. This is a test to verify behavior on the bioperl list in or about 050315 + my $seqobj = $left_primer->seq(); + # print("This is the sequence object for the left primer: ($seqobj)\n"); + my $seq = $seqobj->seq(); + # print("This is the sequence for the left primer: ($seq)\n"); + my $other_left_primer = $primer->get_primer(); + # a different way to access the primers in the stream + # print("This is the 0th primer result:\n"); + my $alt = $p3->primer_results(0,'PRIMER_LEFT_INPUT'); + # $dumper->dumpValue($alt); From faga at pub.open-bio.org Tue Mar 15 16:58:32 2005 From: faga at pub.open-bio.org (Ben faga) Date: Tue Mar 15 16:43:15 2005 Subject: [Bioperl-guts-l] bioperl-live/install_util - New directory Message-ID: <200503152158.j2FLwWDT005323@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/install_util In directory pub.open-bio.org:/tmp/cvs-serv5307/install_util Log Message: Directory /home/repository/bioperl/bioperl-live/install_util added to the repository From faga at pub.open-bio.org Tue Mar 15 17:07:18 2005 From: faga at pub.open-bio.org (Ben faga) Date: Tue Mar 15 16:52:00 2005 Subject: [Bioperl-guts-l] bioperl-live Makefile.PL,1.75,1.76 Message-ID: <200503152207.j2FM7IDT005427@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live In directory pub.open-bio.org:/tmp/cvs-serv5391 Modified Files: Makefile.PL Log Message: Made changes to remove pg_bulk_load_gff.PLS because it's functionality has been aquired by bulk_load_gff.PLS. A symlink is created (from bp_pg_bulk_load_gff.pl to bp_bulk_load_gff.pl) on install using the script install_util/symlink_scripts.PLS. Index: Makefile.PL =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Makefile.PL,v retrieving revision 1.75 retrieving revision 1.76 diff -C2 -d -r1.75 -r1.76 *** Makefile.PL 13 Jan 2005 18:00:32 -0000 1.75 --- Makefile.PL 15 Mar 2005 22:07:16 -0000 1.76 *************** *** 112,117 **** } sub MY::postamble { ! $tline . "\n\n"; } --- 112,126 ---- } + sub MY::install { + package MY; + my $inherited = shift->SUPER::install(@_); + $inherited =~ s/doc_install/doc_install link_install /; + $inherited; + } + + sub MY::postamble { ! $tline . "\n\n" ! . "link_install ::\n\t\$(PERL) \"".cwd()."/install_util/symlink_scripts.pl\"\n\n"; } *************** *** 283,286 **** --- 292,297 ---- use IO::File; use Config; + use Cwd; + my @scripts_to_install = eval {get_scripts_to_install()}; *************** *** 354,358 **** DIR => [ ], # directories with other Makefile.PL's in them EXE_FILES => \@scripts_to_install, ! PL_FILES => { 'doc/makedoc.PL' => ['bioscripts.pod','biodatabases.pod','biodesign.pod','bioperl.pod'] }, PREREQ_PM => { 'IO::String' => 0, --- 365,370 ---- DIR => [ ], # directories with other Makefile.PL's in them EXE_FILES => \@scripts_to_install, ! PL_FILES => { 'doc/makedoc.PL' => ['bioscripts.pod','biodatabases.pod','biodesign.pod','bioperl.pod'], ! 'install_util/symlink_scripts.PLS' => 'install_util/symlink_scripts.pl' }, PREREQ_PM => { 'IO::String' => 0, From faga at pub.open-bio.org Tue Mar 15 17:07:18 2005 From: faga at pub.open-bio.org (Ben faga) Date: Tue Mar 15 16:52:01 2005 Subject: [Bioperl-guts-l] bioperl-live/install_util symlink_scripts.PLS, NONE, 1.1 Message-ID: <200503152207.j2FM7IDT005431@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/install_util In directory pub.open-bio.org:/tmp/cvs-serv5391/install_util Added Files: symlink_scripts.PLS Log Message: Made changes to remove pg_bulk_load_gff.PLS because it's functionality has been aquired by bulk_load_gff.PLS. A symlink is created (from bp_pg_bulk_load_gff.pl to bp_bulk_load_gff.pl) on install using the script install_util/symlink_scripts.PLS. --- NEW FILE: symlink_scripts.PLS --- #!perl use Config; use File::Basename qw(&basename &dirname); use Cwd; $origdir = cwd; chdir dirname($0); $file = basename( $0, '.PL', '.PLS' ); $file .= $^O eq 'VMS' ? '.com' : '.pl'; open OUT, ">$file" or die "Can't create $file: $!"; print "Extracting $file (with variable substitutions)\n"; print OUT "$Config{startperl}\n"; print OUT <<'!NO!SUBS!'; use strict; my %symlink_scripts = ('bp_bulk_load_gff.pl' => 'bp_pg_bulk_load_gff.pl'); !NO!SUBS! print OUT 'my $dir = "' . $Config{'installscript'} . '";'; print OUT <<'!NO!SUBS!'; foreach my $target ( keys ( %symlink_scripts ) ) { unlink "$dir/".$symlink_scripts{$target} if -e "$dir/".$symlink_scripts{$target}; symlink( "$dir/$target", "$dir/".$symlink_scripts{$target} ); } !NO!SUBS! close OUT or die "Can't close $file: $!"; chmod 0755, $file or die "Can't reset permissions for $file: $!\n"; exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':'; chdir $origdir; From faga at pub.open-bio.org Tue Mar 15 17:07:19 2005 From: faga at pub.open-bio.org (Ben faga) Date: Tue Mar 15 16:52:02 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts/Bio-DB-GFF pg_bulk_load_gff.PLS, 1.10, NONE Message-ID: <200503152207.j2FM7JDT005434@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF In directory pub.open-bio.org:/tmp/cvs-serv5391/scripts/Bio-DB-GFF Removed Files: pg_bulk_load_gff.PLS Log Message: Made changes to remove pg_bulk_load_gff.PLS because it's functionality has been aquired by bulk_load_gff.PLS. A symlink is created (from bp_pg_bulk_load_gff.pl to bp_bulk_load_gff.pl) on install using the script install_util/symlink_scripts.PLS. --- pg_bulk_load_gff.PLS DELETED --- From brian_osborne at cognia.com Tue Mar 15 17:32:35 2005 From: brian_osborne at cognia.com (Brian Osborne) Date: Tue Mar 15 17:27:22 2005 Subject: [Bioperl-guts-l] bioperl-live/install_util - New directory In-Reply-To: <200503152158.j2FLwWDT005323@pub.open-bio.org> Message-ID: Ben, You've commited a faux pas, in two respects. One, no one should ever create a top-level directory in bioperl-live without it discussing it first in bioperl-l. Two, you've added a script with the suffix *PLS, and the documentation in a few different places says that *PLS scripts go in the scripts/ directory and all must contain POD documentation, your script does not have POD and you've put it in the wrong place. Brian O. -----Original Message----- From: bioperl-guts-l-bounces@portal.open-bio.org [mailto:bioperl-guts-l-bounces@portal.open-bio.org]On Behalf Of Ben faga Sent: Tuesday, March 15, 2005 4:59 PM To: bioperl-guts-l@bioperl.org Subject: [Bioperl-guts-l] bioperl-live/install_util - New directory Update of /home/repository/bioperl/bioperl-live/install_util In directory pub.open-bio.org:/tmp/cvs-serv5307/install_util Log Message: Directory /home/repository/bioperl/bioperl-live/install_util added to the repository _______________________________________________ Bioperl-guts-l mailing list Bioperl-guts-l@portal.open-bio.org http://portal.open-bio.org/mailman/listinfo/bioperl-guts-l From bosborne at pub.open-bio.org Tue Mar 15 20:58:58 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Tue Mar 15 20:43:43 2005 Subject: [Bioperl-guts-l] bioperl-live/doc/howto/sgml Beginners.xml, 1.30, 1.31 Feature-Annotation.xml, 1.4, 1.5 Message-ID: <200503160158.j2G1wwDT006142@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/doc/howto/sgml In directory pub.open-bio.org:/tmp/cvs-serv6133 Modified Files: Beginners.xml Feature-Annotation.xml Log Message: Edits Index: Beginners.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/Beginners.xml,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** Beginners.xml 11 Mar 2005 03:21:45 -0000 1.30 --- Beginners.xml 16 Mar 2005 01:58:56 -0000 1.31 *************** *** 860,864 ****
! That is how we would construct a query object, but we --- 860,872 ---- ! ! ! ! This capability to query by string and field is only available ! for GenBank as of Bioperl version 1.5, queries to other ! databases, like Swissprot or EMBL, are limited to identifiers ! and accessions. ! ! That is how we would construct a query object, but we *************** *** 1754,1758 **** By default the fasta indexing code will use the string following the > character as a key, meaning that ! fasta header line should look something like this: --- 1762,1767 ---- By default the fasta indexing code will use the string following the > character as a key, meaning that ! fasta header line should look something like this if you want to ! fetch using the value "48882": *************** *** 1764,1768 **** However, what if you wanted to retrieve using some other key, ! like "1CRA" in this example? You can customize the index by using However, what if you wanted to retrieve using some other key, ! like "1CRA" in the example above? You can customize the index by using Biggest stores of on'line pharmacies. Over than 150 major meds Highest qualities assured on our online generic meds at the most competitive prices. Vi'sit us today's! http://oeoutju4.com/_fd5977142df59d3662baa654773c6a8e/ This is 1 -time mailing. N0-re m0val are re'qui-red From Kydyrbaeva at cardblvd.com Wed Mar 16 14:56:43 2005 From: Kydyrbaeva at cardblvd.com (Petrova Rajka) Date: Wed Mar 16 23:51:18 2005 Subject: [Bioperl-guts-l] Re[9]: question with her tablets Message-ID: <3f5601c52aad$04e4f542$7211bed5@sammimail.com> Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of From scain at pub.open-bio.org Thu Mar 17 06:15:45 2005 From: scain at pub.open-bio.org (Scott Cain) Date: Thu Mar 17 06:00:20 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/FeatureIO gff.pm,1.32,1.33 Message-ID: <200503171115.j2HBFjDT014252@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/FeatureIO In directory pub.open-bio.org:/tmp/cvs-serv14243/Bio/FeatureIO Modified Files: gff.pm Log Message: only get SOFA if the validate flag is set Index: gff.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/FeatureIO/gff.pm,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** gff.pm 2 Feb 2005 22:13:22 -0000 1.32 --- gff.pm 17 Mar 2005 11:15:43 -0000 1.33 *************** *** 107,113 **** #need to validate against SOFA, no SO ! $self->so( ! Bio::Ontology::OntologyStore->get_ontology('Sequence Ontology Feature Annotation') ! ); } --- 107,115 ---- #need to validate against SOFA, no SO ! if ($self->validate) { ! $self->so( ! Bio::Ontology::OntologyStore->get_ontology('Sequence Ontology Feature Annotation') ! ); ! } } From info at qsv07.com Thu Mar 17 03:02:12 2005 From: info at qsv07.com (info@qsv07.com) Date: Thu Mar 17 06:12:31 2005 Subject: [Bioperl-guts-l] $B6XCG$N0&!!$D$$$K!&!&(B Message-ID: <20050317080212.18553.qmail@mail.qsv07.com> $BEl5~%i%V%9%H!<%j!<(B $BCK=w$H$b40A4L5NA$N7F$$$N>l$rDs6!$$$?$7$^$9(B $B=U$OJL$l$N5(@a!"AGE($J(B4$B7n$r7^$($k0Y$K:#$+$iM'C#:n$j$I$&$G$9$+!)(B $B$-$C$H8+$D$+$kAGE($J?M!z(B http://loves.qsv20.com/ $B$=$NB>$b$m$b$mFCE5IU!*!*(B $B:#2s$N%P!<%8%g%s%"%C%W$G!"El5~8BDj$+$iA49qBP1~$K$J$j!"$"$J$?$r3Z$7$^$;$^$9(B T-L-S$B;vL36I(B From bosborne at pub.open-bio.org Thu Mar 17 09:31:00 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Thu Mar 17 09:15:47 2005 Subject: [Bioperl-guts-l] bioperl-live/t/data BAB68554.gb,NONE,1.1 Message-ID: <200503171431.j2HEV0DT014736@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/t/data In directory pub.open-bio.org:/tmp/cvs-serv14727 Added Files: BAB68554.gb Log Message: Add for DBSOURCE work --- NEW FILE: BAB68554.gb --- LOCUS BAB68554 141 aa linear VRT 11-APR-2002 DEFINITION alpha D-globin [Aldabrachelys elephantina]. ACCESSION BAB68554 PID g15824047 VERSION BAB68554.1 GI:15824047 DBSOURCE accession AB072353.1 KEYWORDS . SOURCE Aldabra giant tortoise. ORGANISM Aldabrachelys elephantina Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi; Testudines; Cryptodira; Testudinoidea; Testudinidae; Aldabrachelys. REFERENCE 1 AUTHORS Shishikura,F. TITLE The primary structure of hemoglobin D from the Aldabra giant tortoise, Geochelone gigantea JOURNAL Zoolog. Sci. 19, 197-206 (2002) REFERENCE 2 (residues 1 to 141) AUTHORS Shishikura,F. TITLE Direct Submission JOURNAL Submitted (29-SEP-2001) Fumio Shishikura, Nihon University School of Medicine, Biology; Oyaguchi-kamimachi, 30-1, Itabashi-ku, Tokyo 173-8610, Japan (E-mail:fshishi@med.nihon-u.ac.jp, Tel:81-3-3972-8111(ex.2291), Fax:81-3-3972-0027) FEATURES Location/Qualifiers source 1..141 /organism="Aldabrachelys elephantina" /db_xref="taxon:167804" /note="synonym:Dipsochelys dussumieri~synonym:Geochelone gigantea" Protein 1..141 /product="alpha D-globin" CDS 1..141 /coded_by="join(AB072353.1:1..92,AB072353.1:307..511, AB072353.1:739..>864)" /note="hemoglobin D" ORIGIN 1 mlteddkqli qhvwekvleh qedfgaeale rmfivypstk tyfphfdlhh dseqirhhgk 61 kvvgalgdav khidnlsatl selsnlhayn lrvdpvnfkl lshcfqvvlg ahlgreytpq 121 vqvaydkfla avsavlaeky r // From faga at pub.open-bio.org Thu Mar 17 09:56:29 2005 From: faga at pub.open-bio.org (Ben faga) Date: Thu Mar 17 09:43:51 2005 Subject: [Bioperl-guts-l] bioperl-live Makefile.PL,1.76,1.77 Message-ID: <200503171456.j2HEuTDT014937@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live In directory pub.open-bio.org:/tmp/cvs-serv14914 Modified Files: Makefile.PL Log Message: Rolling back changes until discussed. Index: Makefile.PL =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Makefile.PL,v retrieving revision 1.76 retrieving revision 1.77 diff -C2 -d -r1.76 -r1.77 *** Makefile.PL 15 Mar 2005 22:07:16 -0000 1.76 --- Makefile.PL 17 Mar 2005 14:56:26 -0000 1.77 *************** *** 112,126 **** } - sub MY::install { - package MY; - my $inherited = shift->SUPER::install(@_); - $inherited =~ s/doc_install/doc_install link_install /; - $inherited; - } - - sub MY::postamble { ! $tline . "\n\n" ! . "link_install ::\n\t\$(PERL) \"".cwd()."/install_util/symlink_scripts.pl\"\n\n"; } --- 112,117 ---- } sub MY::postamble { ! $tline . "\n\n"; } *************** *** 292,297 **** use IO::File; use Config; - use Cwd; - my @scripts_to_install = eval {get_scripts_to_install()}; --- 283,286 ---- *************** *** 365,370 **** DIR => [ ], # directories with other Makefile.PL's in them EXE_FILES => \@scripts_to_install, ! PL_FILES => { 'doc/makedoc.PL' => ['bioscripts.pod','biodatabases.pod','biodesign.pod','bioperl.pod'], ! 'install_util/symlink_scripts.PLS' => 'install_util/symlink_scripts.pl' }, PREREQ_PM => { 'IO::String' => 0, --- 354,358 ---- DIR => [ ], # directories with other Makefile.PL's in them EXE_FILES => \@scripts_to_install, ! PL_FILES => { 'doc/makedoc.PL' => ['bioscripts.pod','biodatabases.pod','biodesign.pod','bioperl.pod'] }, PREREQ_PM => { 'IO::String' => 0, From faga at pub.open-bio.org Thu Mar 17 09:56:29 2005 From: faga at pub.open-bio.org (Ben faga) Date: Thu Mar 17 09:44:06 2005 Subject: [Bioperl-guts-l] bioperl-live/install_util symlink_scripts.PLS, 1.1, NONE Message-ID: <200503171456.j2HEuTDT014941@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/install_util In directory pub.open-bio.org:/tmp/cvs-serv14914/install_util Removed Files: symlink_scripts.PLS Log Message: Rolling back changes until discussed. --- symlink_scripts.PLS DELETED --- From info at qsv07.com Fri Mar 18 00:56:04 2005 From: info at qsv07.com (info@qsv07.com) Date: Fri Mar 18 07:45:26 2005 Subject: [Bioperl-guts-l] $B6XCG$N0&!!$D$$$K!&!&(B Message-ID: <20050318055604.32473.qmail@mail.qsv07.com> $BEl5~%i%V%9%H!<%j!<(B $BCK=w$H$b40A4L5NA$N7F$$$N>l$rDs6!$$$?$7$^$9(B $B=U$OJL$l$N5(@a!"AGE($J(B4$B7n$r7^$($k0Y$K:#$+$iM'C#:n$j$I$&$G$9$+!)(B $B$-$C$H8+$D$+$kAGE($J?M!z(B http://loves.qsv20.com/ $B$=$NB>$b$m$b$mFCE5IU!*!*(B $B:#2s$N%P!<%8%g%s%"%C%W$G!"El5~8BDj$+$iA49qBP1~$K$J$j!"$"$J$?$r3Z$7$^$;$^$9(B T-L-S$B;vL36I(B From info at qsv07.com Fri Mar 18 00:56:04 2005 From: info at qsv07.com (info@qsv07.com) Date: Fri Mar 18 07:45:30 2005 Subject: [Bioperl-guts-l] $B6XCG$N0&!!$D$$$K!&!&(B Message-ID: <20050318055604.32468.qmail@mail.qsv07.com> $BEl5~%i%V%9%H!<%j!<(B $BCK=w$H$b40A4L5NA$N7F$$$N>l$rDs6!$$$?$7$^$9(B $B=U$OJL$l$N5(@a!"AGE($J(B4$B7n$r7^$($k0Y$K:#$+$iM'C#:n$j$I$&$G$9$+!)(B $B$-$C$H8+$D$+$kAGE($J?M!z(B http://loves.qsv20.com/ $B$=$NB>$b$m$b$mFCE5IU!*!*(B $B:#2s$N%P!<%8%g%s%"%C%W$G!"El5~8BDj$+$iA49qBP1~$K$J$j!"$"$J$?$r3Z$7$^$;$^$9(B T-L-S$B;vL36I(B From DaltonAlphonistM5pPy at redwhitearmy.com Fri Mar 18 09:16:57 2005 From: DaltonAlphonistM5pPy at redwhitearmy.com (Williams L. Peel) Date: Fri Mar 18 09:12:53 2005 Subject: [Bioperl-guts-l] get any downloadble goods from us Message-ID: purple mango http://abepithymia.begitodreamof.com/?a=409 i need to get my nails manicured From bosborne at pub.open-bio.org Fri Mar 18 23:11:51 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Fri Mar 18 22:56:26 2005 Subject: [Bioperl-guts-l] bioperl-live/t SeqIO.t,1.89,1.90 Message-ID: <200503190411.j2J4BpDT021423@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/t In directory pub.open-bio.org:/tmp/cvs-serv21414/t Modified Files: SeqIO.t Log Message: Add Genbank tests for DBSOURCE line Index: SeqIO.t =================================================================== RCS file: /home/repository/bioperl/bioperl-live/t/SeqIO.t,v retrieving revision 1.89 retrieving revision 1.90 diff -C2 -d -r1.89 -r1.90 *** SeqIO.t 15 Dec 2004 04:09:00 -0000 1.89 --- SeqIO.t 19 Mar 2005 04:11:48 -0000 1.90 *************** *** 7,35 **** BEGIN { ! eval { require Test; }; ! if( $@ ) { ! use lib 't'; ! } ! use Test; ! $TESTCOUNT = 353; ! # interpro uses XML::DOM ! eval {require XML::DOM::XPath}; ! if ($@) { ! $TESTCOUNT -= 8; ! $NODOM = 1; ! print STDERR "XML::DOM::XPath not found - skipping interpro tests\n"; ! } ! # BSML_SAX uses XML::SAX ! eval {require XML::SAX; ! require XML::SAX::Writer; ! require XML::SAX::Base; ! 1; }; ! if( $@ ) { ! $TESTCOUNT -= 14; ! $NOSAX = 1; ! warn "XML::SAX::Base or XML::SAX or XML::SAX::Writer not found - skipping BSML_SAX tests\n"; ! } ! plan tests => $TESTCOUNT; } --- 7,35 ---- BEGIN { ! eval { require Test; }; ! if( $@ ) { ! use lib 't'; ! } ! use Test; ! $TESTCOUNT = 358; ! # interpro uses XML::DOM ! eval {require XML::DOM::XPath}; ! if ($@) { ! $TESTCOUNT -= 8; ! $NODOM = 1; ! print STDERR "XML::DOM::XPath not found - skipping interpro tests\n"; ! } ! # BSML_SAX uses XML::SAX ! eval {require XML::SAX; ! require XML::SAX::Writer; ! require XML::SAX::Base; ! 1; }; ! if( $@ ) { ! $TESTCOUNT -= 14; ! $NOSAX = 1; ! warn "XML::SAX::Base or XML::SAX or XML::SAX::Writer not found - skipping BSML_SAX tests\n"; ! } ! plan tests => $TESTCOUNT; } *************** *** 51,80 **** sub read_write { ! my $format = shift; ! my $seq; ! ! my $str = Bio::SeqIO->new(-file=> Bio::Root::IO->catfile("t","data","test.$format"), ! '-format' => $format); ! ok $seq = $str->next_seq(); ! print "Sequence 1 of 2 from $format stream:\n", $seq->seq, "\n\n" if $DEBUG; ! ! unless ($format eq 'raw') { ! ok $seq->id, 'roa1_drome',"ID for format $format"; ! ok $seq->length, 358; ! } ! unless ($format eq 'gcg') { # GCG file can contain only one sequence ! ok $seq = $str->next_seq(); ! print "Sequence 2 of 2 from $format stream:\n", $seq->seq, $seq->seq, "\n" if $DEBUG; ! } ! my $out = Bio::SeqIO->new('-file'=> ">". Bio::Root::IO->catfile("t","data","$format.out"), ! '-format' => $format); ! ok $out->write_seq($seq); ! if ($format eq 'fasta') { ! my $id_type; ! ok($id_type = $out->preferred_id_type('accession.version'), 'accession.version'); ! } } --- 51,78 ---- sub read_write { ! my $format = shift; ! my $seq; ! my $str = Bio::SeqIO->new(-file=> Bio::Root::IO->catfile("t","data","test.$format"), ! '-format' => $format); ! ok $seq = $str->next_seq(); ! print "Sequence 1 of 2 from $format stream:\n", $seq->seq, "\n\n" if $DEBUG; ! unless ($format eq 'raw') { ! ok $seq->id, 'roa1_drome',"ID for format $format"; ! ok $seq->length, 358; ! } ! unless ($format eq 'gcg') { # GCG file can contain only one sequence ! ok $seq = $str->next_seq(); ! print "Sequence 2 of 2 from $format stream:\n", $seq->seq, $seq->seq, "\n" if $DEBUG; ! } + my $out = Bio::SeqIO->new('-file'=> ">". Bio::Root::IO->catfile("t","data","$format.out"), + '-format' => $format); + ok $out->write_seq($seq); + if ($format eq 'fasta') { + my $id_type; + ok($id_type = $out->preferred_id_type('accession.version'), 'accession.version'); + } } *************** *** 82,98 **** foreach my $format (@formats) { ! print "======== $format ========\n" if $DEBUG; ! read_write($format); } END { ! ! map { unlink Bio::Root::IO->catfile("t","data","$_.out") } @formats ! } my ($str, $seq,$ast,$temp,$mf,$ent,$out); # predeclare variables for strict - # PIR testing $str = Bio::SeqIO->new('-file' => Bio::Root::IO->catfile("t","data", "seqfile.pir"), --- 80,94 ---- foreach my $format (@formats) { ! print "======== $format ========\n" if $DEBUG; ! read_write($format); } END { ! map { unlink Bio::Root::IO->catfile("t","data","$_.out") } @formats } my ($str, $seq,$ast,$temp,$mf,$ent,$out); # predeclare variables for strict + # PIR testing $str = Bio::SeqIO->new('-file' => Bio::Root::IO->catfile("t","data", "seqfile.pir"), *************** *** 107,110 **** --- 103,108 ---- } $out = undef; + + # Genbank $ast = Bio::SeqIO->new( '-format' => 'GenBank' , '-file' => Bio::Root::IO->catfile("t","data", *************** *** 130,133 **** --- 128,146 ---- ok(($cds->get_tag_values('transl_except'))[1], '(pos:complement(4224..4226),aa:OTHER)'); + + # This file has a DBSOURCE line, let's see if we can parse it + $ast = Bio::SeqIO->new(-format => 'genbank' , + -file => Bio::Root::IO->catfile("t","data", + "BAB68554.gb")); + $ast->verbose($verbosity); + $as = $ast->next_seq(); + ok $as->molecule, 'linear'; + ok $as->alphabet, 'protein'; + ok($as->primary_id, 15824047); + my $ac = $as->annotation; + ok defined $ac; + my @dblinks = $ac->get_Annotations('dblink'); + ok(scalar @dblinks,1); + # embl $ast = Bio::SeqIO->new( '-format' => 'embl' , *************** *** 536,540 **** my @positions = ( ! undef, undef, undef, undef, undef, undef, --- 549,553 ---- my @positions = ( ! undef, undef, undef, undef, undef, undef, *************** *** 756,761 **** -file => Bio::Root::IO->catfile (qw(t data D12555.gbk))); ! eval { ! $seq = $str->next_seq; }; --- 769,774 ---- -file => Bio::Root::IO->catfile (qw(t data D12555.gbk))); ! eval { ! $seq = $str->next_seq; }; *************** *** 786,810 **** # test BSML-SAX ! unless( $NOSAX ) ! { ! $str = Bio::SeqIO->new(-format => 'bsml_sax', ! -file => Bio::Root::IO->catfile(qw(t data U83300.bsml) ) ! ); ! ok($seq = $str->next_seq); ! @refs = $seq->annotation->get_Annotations('reference'); ! ok(@refs, 2); ! ok($seq->display_id,'MIVN83300'); ! ok($seq->molecule ,'dna'); ! ok(! $seq->is_circular); ! ok($seq->get_dates,2); ! ok($seq->accession_number, 'U83300'); ! ok($seq->seq_version,1); ! my @feats = $seq->get_SeqFeatures; ! ok(@feats, 2); ! ok($feats[1]->start, 1); ! ok($feats[1]->end, 946); ! ok($feats[1]->get_tag_values('db_xref'), 3); ! ok($seq->annotation->get_Annotations('reference'),2); ! ok($seq->annotation->get_Annotations('dblink'),2); } --- 799,822 ---- # test BSML-SAX ! unless( $NOSAX ){ ! $str = Bio::SeqIO->new(-format => 'bsml_sax', ! -file => Bio::Root::IO->catfile(qw(t data U83300.bsml) ) ! ); ! ok($seq = $str->next_seq); ! @refs = $seq->annotation->get_Annotations('reference'); ! ok(@refs, 2); ! ok($seq->display_id,'MIVN83300'); ! ok($seq->molecule ,'dna'); ! ok(! $seq->is_circular); ! ok($seq->get_dates,2); ! ok($seq->accession_number, 'U83300'); ! ok($seq->seq_version,1); ! my @feats = $seq->get_SeqFeatures; ! ok(@feats, 2); ! ok($feats[1]->start, 1); ! ok($feats[1]->end, 946); ! ok($feats[1]->get_tag_values('db_xref'), 3); ! ok($seq->annotation->get_Annotations('reference'),2); ! ok($seq->annotation->get_Annotations('dblink'),2); } From bosborne at pub.open-bio.org Fri Mar 18 23:35:35 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Fri Mar 18 23:21:46 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/SeqIO genbank.pm,1.117,1.118 Message-ID: <200503190435.j2J4ZZDT021520@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/SeqIO In directory pub.open-bio.org:/tmp/cvs-serv21511/Bio/SeqIO Modified Files: genbank.pm Log Message: Add capacity to read and write the DBSOURCE line Index: genbank.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/SeqIO/genbank.pm,v retrieving revision 1.117 retrieving revision 1.118 diff -C2 -d -r1.117 -r1.118 *** genbank.pm 6 Jan 2005 22:17:08 -0000 1.117 --- genbank.pm 19 Mar 2005 04:35:32 -0000 1.118 *************** *** 20,27 **** rather go through the SeqIO handler system. Go: ! $stream = Bio::SeqIO->new(-file => $filename, -format => 'GenBank'); while ( my $seq = $stream->next_seq() ) { ! # do something with $seq } --- 20,28 ---- rather go through the SeqIO handler system. Go: [...1337 lines suppressed...] ! # Print the last line ! if (my $last = substr($str, $i)) { ! my $last_len = length($last); ! my $last_pat = 'a10' x int($last_len / 10) . ! 'a'. $last_len % 10; ! my $blocks = pack $out_pat, ! unpack($last_pat, $last); ! $blocks =~ s/ +$//; ! $self->_print(sprintf("%9d $blocks\n", ! $length - $last_len + 1)); ! } ! $self->_print("//\n"); ! $self->flush if $self->_flush_on_write && defined $self->_fh; ! return 1; ! } } From lstein at pub.open-bio.org Mon Mar 21 00:55:09 2005 From: lstein at pub.open-bio.org (Lincoln Stein) Date: Mon Mar 21 00:39:27 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Graphics/Glyph processed_transcript.pm, 1.4, 1.5 Message-ID: <200503210555.j2L5t9DT004443@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Graphics/Glyph In directory pub.open-bio.org:/tmp/cvs-serv4434 Modified Files: processed_transcript.pm Log Message: added code to processed_transcript that will make it easier to draw features in which exons are colinear with utrs Index: processed_transcript.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Graphics/Glyph/processed_transcript.pm,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** processed_transcript.pm 17 Sep 2003 17:11:30 -0000 1.4 --- processed_transcript.pm 21 Mar 2005 05:55:06 -0000 1.5 *************** *** 9,12 **** --- 9,47 ---- use constant DEFAULT_UTR_COLOR => '#D0D0D0'; + # This hack preprocesses the glyph to remove overlaps between UTRs and + # exons. The exons are clipped so that UTRs have precedence + sub new { + my $class = shift; + my $self = $class->SUPER::new(@_); + + if ($self->option('adjust_exons')) { + # find the utrs + my @utrs = grep {$_->feature->type =~ /utr/i} $self->parts; + my %seen = map {$_=>1} @utrs; + my @other = grep {!$seen{$_}} $self->parts; + my @clipped_parts; + + for my $p (@other) { + my $p_right = $p->{left}+$p->{width}; + for my $u (@utrs) { + my $u_right = $u->{left}+$u->{width}; + if ($u_right > $p->{left} && $u->{left} < $p_right) { # overlaps - clip + if ($p->{left} >= $u->{left}) { + $p->{left} = $u_right; + $p->{width} = $p_right - $p->{left}; + } + if ($p_right <= $u_right) { + my $new_right = $u->{left}; + $p->{width} = $u->{left} - $p->{left}; + } + } + } + } + $self->{parts} = [grep {$_->{width}>1} sort {$a->{left}<=>$b->{left}} $self->parts]; + } + + $self; + } + sub is_utr { my $self = shift; *************** *** 131,134 **** --- 166,177 ---- Draw strand with little arrows undef (false) on the intron. + + -adjust_exons Fix exons so that they don't undef (false) + overlap UTRs + + The B<-adjust_exons> option is needed to handle features in which the + exons (SO type "exon") overlaps with the UTRs (SO types + "five_prime_utr" and "three_prime_utr"). The exon parts of the glyph + will be clipped so that it doesn't overlap with the UTR parts. =head1 BUGS From lstein at pub.open-bio.org Mon Mar 21 10:06:20 2005 From: lstein at pub.open-bio.org (Lincoln Stein) Date: Mon Mar 21 09:50:41 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Graphics Glyph.pm,1.72,1.73 Message-ID: <200503211506.j2LF6KDT006632@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Graphics In directory pub.open-bio.org:/tmp/cvs-serv6607/Bio/Graphics Modified Files: Glyph.pm Log Message: Bio::DB::GFF loading now correctly handles cases of features with multiple parents (e.g. spliced exons) Index: Glyph.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Graphics/Glyph.pm,v retrieving revision 1.72 retrieving revision 1.73 diff -C2 -d -r1.72 -r1.73 *** Glyph.pm 4 Feb 2005 23:39:42 -0000 1.72 --- Glyph.pm 21 Mar 2005 15:06:18 -0000 1.73 *************** *** 953,956 **** --- 953,958 ---- } + sub flip { shift->{flip} } + sub filled_arrow { my $self = shift; From lstein at pub.open-bio.org Mon Mar 21 10:06:20 2005 From: lstein at pub.open-bio.org (Lincoln Stein) Date: Mon Mar 21 09:52:03 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/DB GFF.pm,1.119,1.120 Message-ID: <200503211506.j2LF6KDT006630@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/DB In directory pub.open-bio.org:/tmp/cvs-serv6607/Bio/DB Modified Files: GFF.pm Log Message: Bio::DB::GFF loading now correctly handles cases of features with multiple parents (e.g. spliced exons) Index: GFF.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/DB/GFF.pm,v retrieving revision 1.119 retrieving revision 1.120 diff -C2 -d -r1.119 -r1.120 *** GFF.pm 1 Nov 2004 22:51:08 -0000 1.119 --- GFF.pm 21 Mar 2005 15:06:17 -0000 1.120 *************** *** 2305,2323 **** } } ! $self->load_gff_line({ref => $ref, ! class => $class, ! source => $source, ! method => $method, ! start => $start, ! stop => $stop, ! score => $score, ! strand => $strand, ! phase => $phase, ! gclass => $gclass, ! gname => $gname, ! tstart => $tstart, ! tstop => $tstop, ! attributes => $attributes} ! ); } --- 2305,2328 ---- } } ! # GFF2/3 transition stuff ! $gclass = [$gclass] unless ref $gclass; ! $gname = [$gname] unless ref $gname; ! for (my $i=0; $i<@$gname;$i++) { ! $self->load_gff_line({ref => $ref, ! class => $class, ! source => $source, ! method => $method, ! start => $start, ! stop => $stop, ! score => $score, ! strand => $strand, ! phase => $phase, ! gclass => $gclass->[$i], ! gname => $gname->[$i], ! tstart => $tstart, ! tstop => $tstop, ! attributes => $attributes} ! ); ! } } *************** *** 3388,3392 **** # and the group it belonged to. This code is a transition between # gff2 and the new parent/ID dichotomy in gff3. ! if ($tag eq 'Parent' or $tag eq 'ID') { $id{$tag} = [_gff3_name_munging(shift(@values),$dc)]; } --- 3393,3406 ---- # and the group it belonged to. This code is a transition between # gff2 and the new parent/ID dichotomy in gff3. ! if ($tag eq 'Parent') { ! my (@names,@classes); ! for (@values) { ! my ($name,$class) = _gff3_name_munging($_,$dc); ! push @names,$name; ! push @classes,$class; ! } ! $id{$tag} = @names > 1 ? [\@names,\@classes] : [$names[0],$classes[0]]; ! } ! elsif ($tag eq 'ID') { $id{$tag} = [_gff3_name_munging(shift(@values),$dc)]; } From lstein at pub.open-bio.org Mon Mar 21 10:06:20 2005 From: lstein at pub.open-bio.org (Lincoln Stein) Date: Mon Mar 21 09:52:04 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts/Bio-DB-GFF bulk_load_gff.PLS, 1.26, 1.27 fast_load_gff.PLS, 1.17, 1.18 Message-ID: <200503211506.j2LF6KDT006634@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF In directory pub.open-bio.org:/tmp/cvs-serv6607/scripts/Bio-DB-GFF Modified Files: bulk_load_gff.PLS fast_load_gff.PLS Log Message: Bio::DB::GFF loading now correctly handles cases of features with multiple parents (e.g. spliced exons) Index: bulk_load_gff.PLS =================================================================== RCS file: /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF/bulk_load_gff.PLS,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** bulk_load_gff.PLS 9 Mar 2005 19:06:42 -0000 1.26 --- bulk_load_gff.PLS 21 Mar 2005 15:06:18 -0000 1.27 *************** *** 456,505 **** my ($group_class,$group_name,$target_start,$target_stop,$attributes) = $db->split_group($group,$gff3); - $group_class ||= '\N'; - $group_name ||= '\N'; - $target_start ||= '\N'; - $target_stop ||= '\N'; - $method ||= '\N'; - $source ||= '\N'; ! my $fid = $FID++; ! my $gid = $GROUPID{$group_class,$group_name} ||= $GID++; ! my $ftypeid = $FTYPEID{$source,$method} ||= $FTYPEID++; ! my $bin = bin($start,$stop,$db->min_bin); ! $FH{ FDATA() }->print( join("\t",$fid,$ref,$start,$stop,$bin,$ftypeid,$score,$strand,$phase,$gid,$target_start,$target_stop),"\n" ); ! if ($use_mysqlcmap){ ! my $feature_id = next_number( ! db => $cmap_db, ! table_name => 'cmap_feature', ! id_field => 'feature_id', ! ) ! or die 'No feature id'; ! my $direction = $strand eq '-' ? -1:1; ! $FH{ FGROUP() }->print( ! join("\t",$feature_id,$feature_id,'NULL',0, $group_name,0,0,'NULL',1,$direction, $group_class,) ! ,"\n" ! ) unless $DONE{"G$gid"}++; ! } ! else { ! $FH{ FGROUP() }->print( join("\t",$gid,$group_class,$group_name),"\n" ) unless $DONE{"G$gid"}++; ! } ! $FH{ FTYPE() }->print( join("\t",$ftypeid,$method,$source),"\n" ) unless $DONE{"T$ftypeid"}++; ! foreach (@$attributes) { ! my ($key,$value) = @$_; ! my $attributeid = $ATTRIBUTEID{$key} ||= $ATTRIBUTEID++; ! $FH{ FATTRIBUTE() }->print( join("\t",$attributeid,$key),"\n" ) unless $DONE{"A$attributeid"}++; ! $FH{ FATTRIBUTE_TO_FEATURE() }->print( join("\t",$fid,$attributeid,$value),"\n"); ! } ! if ( $fid % 1000 == 0) { ! my $now = Time::HiRes::time() if $timer; ! my $elapsed = $timer ? sprintf(" in %5.2fs",$now - $last) : ''; ! $last = $now; ! print STDERR "$fid features parsed$elapsed..."; ! print STDERR -t STDOUT && !$ENV{EMACS} ? "\r" : "\n"; ! } } --- 456,512 ---- my ($group_class,$group_name,$target_start,$target_stop,$attributes) = $db->split_group($group,$gff3); ! # GFF2/3 transition ! $group_class = [$group_class] unless ref $group_class; ! $group_name = [$group_name] unless ref $group_name; ! for (my $i=0; $i < @$group_name; $i++) { ! $group_class->[$i] ||= '\N'; ! $group_name->[$i] ||= '\N'; ! $target_start ||= '\N'; ! $target_stop ||= '\N'; ! $method ||= '\N'; ! $source ||= '\N'; ! my $fid = $FID++; ! my $gid = $GROUPID{$group_class->[$i],$group_name->[$i]} ||= $GID++; ! my $ftypeid = $FTYPEID{$source,$method} ||= $FTYPEID++; ! my $bin = bin($start,$stop,$db->min_bin); ! $FH{ FDATA() }->print( join("\t",$fid,$ref,$start,$stop,$bin,$ftypeid,$score,$strand,$phase,$gid,$target_start,$target_stop),"\n" ); ! if ($use_mysqlcmap){ ! my $feature_id = next_number( ! db => $cmap_db, ! table_name => 'cmap_feature', ! id_field => 'feature_id', ! ) ! or die 'No feature id'; ! my $direction = $strand eq '-' ? -1:1; ! $FH{ FGROUP() }->print( ! join("\t",$feature_id,$feature_id,'NULL',0, $group_name->[$i],0,0,'NULL',1,$direction, $group_class->[$i],) ! ,"\n" ! ) unless $DONE{"G$gid"}++; ! } ! else { ! $FH{ FGROUP() }->print( join("\t",$gid,$group_class->[$i],$group_name->[$i]),"\n" ) unless $DONE{"G$gid"}++; ! } ! $FH{ FTYPE() }->print( join("\t",$ftypeid,$method,$source),"\n" ) unless $DONE{"T$ftypeid"}++; ! ! foreach (@$attributes) { ! my ($key,$value) = @$_; ! my $attributeid = $ATTRIBUTEID{$key} ||= $ATTRIBUTEID++; ! $FH{ FATTRIBUTE() }->print( join("\t",$attributeid,$key),"\n" ) unless $DONE{"A$attributeid"}++; ! $FH{ FATTRIBUTE_TO_FEATURE() }->print( join("\t",$fid,$attributeid,$value),"\n"); ! } + if ( $fid % 1000 == 0) { + my $now = Time::HiRes::time() if $timer; + my $elapsed = $timer ? sprintf(" in %5.2fs",$now - $last) : ''; + $last = $now; + print STDERR "$fid features parsed$elapsed..."; + print STDERR -t STDOUT && !$ENV{EMACS} ? "\r" : "\n"; + } + + } } Index: fast_load_gff.PLS =================================================================== RCS file: /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF/fast_load_gff.PLS,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** fast_load_gff.PLS 2 Oct 2004 15:11:04 -0000 1.17 --- fast_load_gff.PLS 21 Mar 2005 15:06:18 -0000 1.18 *************** *** 324,357 **** $phase = '\N' if $phase eq '.'; ! my ($group_class,$group_name,$target_start,$target_stop,$attributes) = $db->split_group($group,$gff3); ! $group_class ||= '\N'; ! $group_name ||= '\N'; ! $target_start ||= '\N'; ! $target_stop ||= '\N'; ! $method ||= '\N'; ! $source ||= '\N'; ! my $fid = $FID++; ! my $gid = $GROUPID{$group_class,$group_name} ||= $GID++; ! my $ftypeid = $FTYPEID{$source,$method} ||= $FTYPEID++; ! my $bin = bin($start,$stop,$db->min_bin); ! $FH{ FDATA() }->print( join("\t",$fid,$ref,$start,$stop,$bin,$ftypeid,$score,$strand,$phase,$gid,$target_start,$target_stop),"\n" ); ! $FH{ FGROUP() }->print( join("\t",$gid,$group_class,$group_name),"\n" ) unless $DONE{"fgroup$;$gid"}++; ! $FH{ FTYPE() }->print( join("\t",$ftypeid,$method,$source),"\n" ) unless $DONE{"ftype$;$ftypeid"}++; ! foreach (@$attributes) { ! my ($key,$value) = @$_; ! my $attributeid = $ATTRIBUTEID{$key} ||= $ATTRIBUTEID++; ! $FH{ FATTRIBUTE() }->print( join("\t",$attributeid,$key),"\n" ) unless $DONE{"fattribute$;$attributeid"}++; ! $FH{ FATTRIBUTE_TO_FEATURE() }->print( join("\t",$fid,$attributeid,$value),"\n"); ! } ! if ( $FEATURES % 1000 == 0) { ! my $now = Time::HiRes::time() if $timer; ! my $elapsed = $timer ? sprintf(" in %5.2fs",$now - $last) : ''; ! $last = $now; ! print STDERR "$fid features parsed$elapsed..."; ! print STDERR -t STDOUT && !$ENV{EMACS} ? "\r" : "\n"; } } --- 324,365 ---- $phase = '\N' if $phase eq '.'; ! my ($gclass,$gname,$target_start,$target_stop,$attributes) = $db->split_group($group,$gff3); ! # GFF2/3 transition ! $gclass = [$gclass] unless ref $gclass; ! $gname = [$gname] unless ref $gname; ! for (my $i=0; $i < @$gname; $i++) { ! my $group_class = $gclass->[$i]; ! my $group_name = $gname->[$i]; ! $group_class ||= '\N'; ! $group_name ||= '\N'; ! $target_start ||= '\N'; ! $target_stop ||= '\N'; ! $method ||= '\N'; ! $source ||= '\N'; ! my $fid = $FID++; ! my $gid = $GROUPID{$group_class,$group_name} ||= $GID++; ! my $ftypeid = $FTYPEID{$source,$method} ||= $FTYPEID++; ! my $bin = bin($start,$stop,$db->min_bin); ! $FH{ FDATA() }->print( join("\t",$fid,$ref,$start,$stop,$bin,$ftypeid,$score,$strand,$phase,$gid,$target_start,$target_stop),"\n" ); ! $FH{ FGROUP() }->print( join("\t",$gid,$group_class,$group_name),"\n" ) unless $DONE{"fgroup$;$gid"}++; ! $FH{ FTYPE() }->print( join("\t",$ftypeid,$method,$source),"\n" ) unless $DONE{"ftype$;$ftypeid"}++; ! ! foreach (@$attributes) { ! my ($key,$value) = @$_; ! my $attributeid = $ATTRIBUTEID{$key} ||= $ATTRIBUTEID++; ! $FH{ FATTRIBUTE() }->print( join("\t",$attributeid,$key),"\n" ) unless $DONE{"fattribute$;$attributeid"}++; ! $FH{ FATTRIBUTE_TO_FEATURE() }->print( join("\t",$fid,$attributeid,$value),"\n"); ! } ! if ( $FEATURES % 1000 == 0) { ! my $now = Time::HiRes::time() if $timer; ! my $elapsed = $timer ? sprintf(" in %5.2fs",$now - $last) : ''; ! $last = $now; ! print STDERR "$fid features parsed$elapsed..."; ! print STDERR -t STDOUT && !$ENV{EMACS} ? "\r" : "\n"; ! } } } From lstein at pub.open-bio.org Mon Mar 21 11:25:34 2005 From: lstein at pub.open-bio.org (Lincoln Stein) Date: Mon Mar 21 11:10:27 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts/Bio-DB-GFF bulk_load_gff.PLS, 1.27, 1.28 fast_load_gff.PLS, 1.18, 1.19 Message-ID: <200503211625.j2LGPYDT006894@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF In directory pub.open-bio.org:/tmp/cvs-serv6885/scripts/Bio-DB-GFF Modified Files: bulk_load_gff.PLS fast_load_gff.PLS Log Message: quashed spurious warnings about embedded sequences Index: bulk_load_gff.PLS =================================================================== RCS file: /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF/bulk_load_gff.PLS,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** bulk_load_gff.PLS 21 Mar 2005 15:06:18 -0000 1.27 --- bulk_load_gff.PLS 21 Mar 2005 16:25:32 -0000 1.28 *************** *** 322,326 **** my (@gff,@fasta); foreach (@ARGV) { ! if (/\.(fa|fasta|dna|seq|fast)$/i) { push @fasta,$_; } else { --- 322,326 ---- my (@gff,@fasta); foreach (@ARGV) { ! if (/\.(fa|fasta|dna|seq|fast)(?:\.|$)/i) { push @fasta,$_; } else { Index: fast_load_gff.PLS =================================================================== RCS file: /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF/fast_load_gff.PLS,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** fast_load_gff.PLS 21 Mar 2005 15:06:18 -0000 1.18 --- fast_load_gff.PLS 21 Mar 2005 16:25:32 -0000 1.19 *************** *** 194,198 **** my(@fasta,@gff); foreach (@ARGV) { ! if (/\.(fa|fasta|dna|seq|fast)/i) { push @fasta,$_; } else { --- 194,198 ---- my(@fasta,@gff); foreach (@ARGV) { ! if (/\.(fa|fasta|dna|seq|fast)(?:\.|$)/i) { push @fasta,$_; } else { From faga at pub.open-bio.org Mon Mar 21 13:36:37 2005 From: faga at pub.open-bio.org (Ben faga) Date: Mon Mar 21 13:20:52 2005 Subject: [Bioperl-guts-l] bioperl-live/maintenance symlink_scripts.PLS, NONE, 1.1 Message-ID: <200503211836.j2LIabDT007415@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/maintenance In directory pub.open-bio.org:/tmp/cvs-serv7388/maintenance Added Files: symlink_scripts.PLS Log Message: Since the bp_bulk_load_gff.pl has been replaced with a script that takes the place of both itself (mysql version) and bp_pg_bulk_load_gff.pl (postgresversion), we want to create a symbolic link from postgresversion to bp_bulk_load_gff.pl on install. This will make the change transparent to people who have been using the postgres version. On make, an external script maintenence/symlink_scripts.pl gets created with all the necessary path info. In the postamble of Makefile.PL, a line was inserted to call the symlink_scripts.pl file. Then on install, symlink_scripts.pl is run and creates the symbolic link. The Perl symlink function was used to create the link, so that on systems where symlink doesn't work, it catches the error and prints a note tothe user. That is untested though. --- NEW FILE: symlink_scripts.PLS --- #!perl use Config; use File::Basename qw(&basename &dirname); use Cwd; $origdir = cwd; chdir dirname($0); $file = basename( $0, '.PL', '.PLS' ); $file .= $^O eq 'VMS' ? '.com' : '.pl'; open OUT, ">$file" or die "Can't create $file: $!"; print "Extracting $file (with variable substitutions)\n"; print OUT "$Config{startperl}\n"; print OUT <<'!NO!SUBS!'; use strict; my %symlink_scripts = ('bp_bulk_load_gff.pl' => 'bp_pg_bulk_load_gff.pl'); !NO!SUBS! print OUT 'my $dir = "' . $Config{'installscript'} . '";'; print OUT <<'!NO!SUBS!'; foreach my $target ( keys ( %symlink_scripts ) ) { unlink "$dir/".$symlink_scripts{$target} if -e "$dir/".$symlink_scripts{$target}; eval { symlink( "$dir/$target", "$dir/".$symlink_scripts{$target} ); 1} or print STDERR "Cannot create symbolic link named $dir/" . $symlink_scripts{$target} . " on you system for $dir/$target\n"; } !NO!SUBS! close OUT or die "Can't close $file: $!"; chmod 0755, $file or die "Can't reset permissions for $file: $!\n"; exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':'; chdir $origdir; From faga at pub.open-bio.org Mon Mar 21 13:36:38 2005 From: faga at pub.open-bio.org (Ben faga) Date: Mon Mar 21 13:20:56 2005 Subject: [Bioperl-guts-l] bioperl-live Makefile.PL,1.77,1.78 Message-ID: <200503211836.j2LIacDT007416@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live In directory pub.open-bio.org:/tmp/cvs-serv7388 Modified Files: Makefile.PL Log Message: Since the bp_bulk_load_gff.pl has been replaced with a script that takes the place of both itself (mysql version) and bp_pg_bulk_load_gff.pl (postgresversion), we want to create a symbolic link from postgresversion to bp_bulk_load_gff.pl on install. This will make the change transparent to people who have been using the postgres version. On make, an external script maintenence/symlink_scripts.pl gets created with all the necessary path info. In the postamble of Makefile.PL, a line was inserted to call the symlink_scripts.pl file. Then on install, symlink_scripts.pl is run and creates the symbolic link. The Perl symlink function was used to create the link, so that on systems where symlink doesn't work, it catches the error and prints a note tothe user. That is untested though. Index: Makefile.PL =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Makefile.PL,v retrieving revision 1.77 retrieving revision 1.78 diff -C2 -d -r1.77 -r1.78 *** Makefile.PL 17 Mar 2005 14:56:26 -0000 1.77 --- Makefile.PL 21 Mar 2005 18:36:35 -0000 1.78 *************** *** 112,117 **** } sub MY::postamble { ! $tline . "\n\n"; } --- 112,126 ---- } + sub MY::install { + package MY; + my $inherited = shift->SUPER::install(@_); + $inherited =~ s/doc_install/doc_install link_install /; + $inherited; + } + + sub MY::postamble { ! $tline . "\n\n" ! . "link_install ::\n\t\$(PERL) \"".cwd()."/maintenance/symlink_scripts.pl\"\n\n"; } *************** *** 283,286 **** --- 292,296 ---- use IO::File; use Config; + use Cwd; my @scripts_to_install = eval {get_scripts_to_install()}; *************** *** 354,358 **** DIR => [ ], # directories with other Makefile.PL's in them EXE_FILES => \@scripts_to_install, ! PL_FILES => { 'doc/makedoc.PL' => ['bioscripts.pod','biodatabases.pod','biodesign.pod','bioperl.pod'] }, PREREQ_PM => { 'IO::String' => 0, --- 364,369 ---- DIR => [ ], # directories with other Makefile.PL's in them EXE_FILES => \@scripts_to_install, ! PL_FILES => { 'doc/makedoc.PL' => ['bioscripts.pod','biodatabases.pod','biodesign.pod','bioperl.pod'], ! 'maintenance/symlink_scripts.PLS' => 'maintenance/symlink_scripts.pl' }, PREREQ_PM => { 'IO::String' => 0, From lstein at pub.open-bio.org Mon Mar 21 13:56:41 2005 From: lstein at pub.open-bio.org (Lincoln Stein) Date: Mon Mar 21 13:40:46 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/DB GFF.pm,1.120,1.121 Message-ID: <200503211856.j2LIufDT007515@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/DB In directory pub.open-bio.org:/tmp/cvs-serv7499/Bio/DB Modified Files: GFF.pm Log Message: The attributes "Name" and "Synonym" in GFF3 files now treated as equivalent to Alias Index: GFF.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/DB/GFF.pm,v retrieving revision 1.120 retrieving revision 1.121 diff -C2 -d -r1.120 -r1.121 *** GFF.pm 21 Mar 2005 15:06:17 -0000 1.120 --- GFF.pm 21 Mar 2005 18:56:39 -0000 1.121 *************** *** 3409,3412 **** --- 3409,3418 ---- $id{$tag} = [_gff3_name_munging($gname,$dc),$tstart,$tstop]; } + elsif ($tag eq 'Name') { + push @attributes,[Alias=>$_] foreach @values; + } + elsif ($tag =~ /synonym/i) { + $tag = 'Alias'; + } push @attributes,[$tag=>$_] foreach @values; } From lstein at pub.open-bio.org Mon Mar 21 13:56:41 2005 From: lstein at pub.open-bio.org (Lincoln Stein) Date: Mon Mar 21 13:40:48 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts/Bio-DB-GFF bulk_load_gff.PLS, 1.28, 1.29 Message-ID: <200503211856.j2LIufDT007519@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF In directory pub.open-bio.org:/tmp/cvs-serv7499/scripts/Bio-DB-GFF Modified Files: bulk_load_gff.PLS Log Message: The attributes "Name" and "Synonym" in GFF3 files now treated as equivalent to Alias Index: bulk_load_gff.PLS =================================================================== RCS file: /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF/bulk_load_gff.PLS,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** bulk_load_gff.PLS 21 Mar 2005 16:25:32 -0000 1.28 --- bulk_load_gff.PLS 21 Mar 2005 18:56:39 -0000 1.29 *************** *** 322,326 **** my (@gff,@fasta); foreach (@ARGV) { ! if (/\.(fa|fasta|dna|seq|fast)(?:\.|$)/i) { push @fasta,$_; } else { --- 322,326 ---- my (@gff,@fasta); foreach (@ARGV) { ! if (/\.(fa|fasta|dna|seq|fast)(?:$|\.)/i) { push @fasta,$_; } else { *************** *** 342,350 **** if ( $use_pg ) { ! $FH{FDATA() }->print("COPY fdata (fid, fref, fstart, fstop, fbin, ftypeid, fscore, fstrand, fphase, gid, ftarget_start, ftarget_stop) FROM stdin;\n"); ! $FH{FTYPE() }->print("COPY ftype (ftypeid, fmethod, fsource) FROM stdin;\n"); ! $FH{FGROUP() }->print("COPY fgroup (gid, gclass, gname) FROM stdin;\n"); ! $FH{FATTRIBUTE() }->print("COPY fattribute (fattribute_id, fattribute_name) FROM stdin;\n"); ! $FH{FATTRIBUTE_TO_FEATURE()}->print("COPY fattribute_to_feature (fid, fattribute_id, fattribute_value) FROM stdin;\n"); } my $FID = 1; --- 342,350 ---- if ( $use_pg ) { ! $FH{FDATA() }->print("COPY fdata (fid, fref, fstart, fstop, fbin, ftypeid, fscore, fstrand, fphase, gid, ftarget_start, ftarget_stop) FROM stdin;\n"); ! $FH{FTYPE() }->print("COPY ftype (ftypeid, fmethod, fsource) FROM stdin;\n"); ! $FH{FGROUP() }->print("COPY fgroup (gid, gclass, gname) FROM stdin;\n"); ! $FH{FATTRIBUTE() }->print("COPY fattribute (fattribute_id, fattribute_name) FROM stdin;\n"); ! $FH{FATTRIBUTE_TO_FEATURE()}->print("COPY fattribute_to_feature (fid, fattribute_id, fattribute_value) FROM stdin;\n"); } my $FID = 1; *************** *** 367,371 **** my $start = $last; ! # avoid hanging on standalone --fasta load if (!@ARGV) { $FH{NULL} = IO::File->new(">$tmpdir/null"); --- 367,371 ---- my $start = $last; ! # avoid hanging on standalone --fasta load if (!@ARGV) { $FH{NULL} = IO::File->new(">$tmpdir/null"); *************** *** 375,397 **** my ($cmap_db); if ($use_mysqlcmap){ ! my $options = { ! AutoCommit => 1, ! FetchHashKeyName => 'NAME_lc', ! LongReadLen => 3000, ! LongTruncOk => 1, ! RaiseError => 1, ! }; ! $cmap_db = DBI->connect( $DSN, $USER, $PASSWORD, $options ); } # Only load CMap::Utils if using cmap unless (!$use_mysqlcmap or ! eval { ! require Bio::GMOD::CMap::Utils; ! Bio::GMOD::CMap::Utils->import('next_number'); ! 1; ! } ! ) { ! print STDERR "Error loading Bio::GMOD::CMap::Utils\n"; } --- 375,397 ---- my ($cmap_db); if ($use_mysqlcmap){ ! my $options = { ! AutoCommit => 1, ! FetchHashKeyName => 'NAME_lc', ! LongReadLen => 3000, ! LongTruncOk => 1, ! RaiseError => 1, ! }; ! $cmap_db = DBI->connect( $DSN, $USER, $PASSWORD, $options ); } # Only load CMap::Utils if using cmap unless (!$use_mysqlcmap or ! eval { ! require Bio::GMOD::CMap::Utils; ! Bio::GMOD::CMap::Utils->import('next_number'); ! 1; ! } ! ) { ! print STDERR "Error loading Bio::GMOD::CMap::Utils\n"; } *************** *** 434,438 **** ($1,'reference','Component',$2,$3,'.','.','.',$gff3 ? "ID=Sequence:$1": qq(Sequence "$1")); } ! elsif (/^\#/) { next; --- 434,438 ---- ($1,'reference','Component',$2,$3,'.','.','.',$gff3 ? "ID=Sequence:$1": qq(Sequence "$1")); } ! elsif (/^\#/) { next; *************** *** 489,493 **** } else { ! $FH{ FGROUP() }->print( join("\t",$gid,$group_class->[$i],$group_name->[$i]),"\n" ) unless $DONE{"G$gid"}++; } $FH{ FTYPE() }->print( join("\t",$ftypeid,$method,$source),"\n" ) unless $DONE{"T$ftypeid"}++; --- 489,493 ---- } else { ! $FH{ FGROUP() }->print( join("\t",$gid,$group_class->[$i],$group_name->[$i]),"\n") unless $DONE{"G$gid"}++; } $FH{ FTYPE() }->print( join("\t",$ftypeid,$method,$source),"\n" ) unless $DONE{"T$ftypeid"}++; *************** *** 507,511 **** print STDERR -t STDOUT && !$ENV{EMACS} ? "\r" : "\n"; } - } } --- 507,510 ---- *************** *** 524,533 **** select $old; } if ($use_pg) { ! $FH{FDATA() }->print("\\.\n\n"); ! $FH{FTYPE() }->print("\\.\n\n"); ! $FH{FGROUP() }->print("\\.\n\n"); ! $FH{FATTRIBUTE() }->print("\\.\n\n"); ! $FH{FATTRIBUTE_TO_FEATURE()}->print("\\.\n\n"); } --- 523,533 ---- select $old; } + if ($use_pg) { ! $FH{FDATA() }->print("\\.\n\n"); ! $FH{FTYPE() }->print("\\.\n\n"); ! $FH{FGROUP() }->print("\\.\n\n"); ! $FH{FATTRIBUTE() }->print("\\.\n\n"); ! $FH{FATTRIBUTE_TO_FEATURE()}->print("\\.\n\n"); } *************** *** 538,569 **** if ($use_pg){ ! warn "Loading feature data. You may see Postgres comments...\n"; ! foreach (@files) { ! my $file = "$tmpdir/$_.$$"; ! $AUTH ? system("psql $AUTH -f $file $DSN") ! : system('psql','-f', $file, $DSN); ! unlink $file; ! } ! warn "Updating sequences ...\n"; ! $db->update_sequences(); ! warn "Creating indexes ...\n"; ! $db->_create_indexes_etc(); ! warn "done...\n"; } elsif( $use_mysql or $use_mysqlcmap ) { ! $start = time(); ! my $success = 1; ! my $TERMINATEDBY = $bWINDOWS ? q( LINES TERMINATED BY '\r\n') : ''; ! foreach (@files) { ! my $command = qq[ ! ${\MYSQL} $AUTH -e "lock tables ] . function_to_table($_,$ADAPTOR) . qq[ write; delete from ] --- 538,570 ---- if ($use_pg){ ! warn "Loading feature data. You may see Postgres comments...\n"; ! foreach (@files) { ! my $file = "$tmpdir/$_.$$"; ! $AUTH ? system("psql $AUTH -f $file $DSN") ! : system('psql','-f', $file, $DSN); ! unlink $file; ! } ! warn "Updating sequences ...\n"; ! $db->update_sequences(); ! warn "Creating indexes ...\n"; ! $db->_create_indexes_etc(); ! warn "done...\n"; } + elsif( $use_mysql or $use_mysqlcmap ) { ! $start = time(); ! my $success = 1; ! my $TERMINATEDBY = $bWINDOWS ? q( LINES TERMINATED BY '\r\n') : ''; ! foreach (@files) { ! my $command = qq[ ! ${\MYSQL} $AUTH -e "lock tables ] . function_to_table($_,$ADAPTOR) . qq[ write; delete from ] From jason at pub.open-bio.org Mon Mar 21 17:06:28 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Mon Mar 21 16:50:34 2005 Subject: [Bioperl-guts-l] bioperl-live/doc/howto/sgml PAML.xml,1.2,1.3 Message-ID: <200503212206.j2LM6SDT009564@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/doc/howto/sgml In directory pub.open-bio.org:/tmp/cvs-serv9548 Modified Files: PAML.xml Log Message: NSSites description Index: PAML.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/PAML.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** PAML.xml 11 Mar 2005 03:21:45 -0000 1.2 --- PAML.xml 21 Mar 2005 22:06:26 -0000 1.3 *************** *** 30,46 **** Duke University - - University Program in - Genetics - - Center for - Genome Technology
- Duke University Medical Center - Box 3568 - Durham, - North Carolina - 27710-3568 - USA jason-at-bioperl.org
--- 30,34 ---- *************** *** 63,73 **** Added pairwise Ka,Ks example code and running code ! This document is copyright Aaron Mackey, 2002. For ! reproduction other than personal use please contact me at ! amackey@virginia.edu --- 51,69 ---- Added pairwise Ka,Ks example code and running code + + 0.3 + 2005-03-15 + jes + Added branch-specific paramater parsing (NSsites + and per-branch rates) + + ! This document is copyright Aaron Mackey, Jason Stajich, 2002-2005. For ! reproduction other than personal use please contact us at ! amackey@virginia.edu or jason@bioperl.org. *************** *** 343,346 **** --- 339,463 ---- + +
+ Parsing branch-specific rates and NSSites results + + PAML allows for several models of molecular + evolution. Given a tree topology one can test whether or not + contraints of evolutionary rates on different parts of the topology + better explain the observe data than a null model where an overall + rate is assumed. To do this a tree topology must be provided and + typically marked to specify which branches to test the alternative + hypotheses of differing rates. + + + To get access to this branch specific data we store it in the Bio::Tree::Tree object which is + parsed for each result. The nodes in the tree will contain + additional tagged values for capturing the branch specific + evolutionary rates. In cases where there are several + different models of evolution tested (i.e. M0, M1, etc) we + create + a Bio::Tools::Phylo::PAML::ModelResult + to store each of the model results separately. A separate + Tree object will be associated with each one of these models. + + + Please note that the models underlting PAML 3.14 have + changed some from PAML 3.13 and earlier. NSsites 1 and 2 mean + slightly different things than they did in previous versions. + + + Accessing Tree data + First we'll just descibe how to access data for a + topology for a single model or where NSsites=0. In this case + we'll just want to get the tree(s) associated with a give + result. In this code we loop through all + the Bio::Tree::Tree associated with the Bio::Tools::Phylo::PAML::Result. + + + use Bio::Tools::Phylo::PAML; + + my $outcodeml = shift(@ARGV); + my $paml_parser = new Bio::Tools::Phylo::PAML(-file => $outcodeml, + -dir => "./"); + if( my $result = $paml_parser->next_result() ) { + while ( my $tree = $result->next_tree ) { + for my $node ( $tree->get_nodes ) { + my $id; + # first we do some work to figure out what the ID should be. + # for a leaf or tip node this is just the taxon label + if( $node->is_Leaf() ) { + $id = $node->id; + } else { + # for the internal nodes it is just the name of all the sub-nodes + # put together, much like how Sanderson represents internal nodes + # in r8s + $id = "(".join(",", map { $_->id } grep { $_->is_Leaf } + $node->get_all_Descendents) .")"; + } + if( ! $node->ancestor || ! $node->has_tag('t') ) { + # skip when no values have been associated with this node + # (like the root node) + next; + } + printf "%s\tt=%.3f\tS=%.1f\tN=%.1f\tdN/dS=%.4f\tdN=%.4f\t". + "dS=%.4f\tS*dS=%.1f\tN*dN=%.1f\n", + $id,map { ($node->get_tag_values($_))[0] } + qw(t S N dN/dS dN dS), 'S*dS', 'N*dN'; + } + } + } + + Accessing NSsites data + + In cases where nssites=1 or nssites=2 is provided the data for + the results is accessible through + the Bio::Tools::Phylo::PAML::ModelResult. + The function get_NSSite_results on + the Bio::Tool::Phylo::PAML::Result + object. In this way multiple model results can be folded into + a single PAML::Result object. The + code shown below is nearly identical to that in the previous + example, there is just an additional loop to process the + NSsite Result objects. + + + use Bio::Tools::Phylo::PAML; + + my $outcodeml = shift(@ARGV); + my $paml_parser = new Bio::Tools::Phylo::PAML(-file => $outcodeml, + -dir => "./"); + if( my $result = $paml_parser->next_result() ) { + for my $ns_result ( $result->get_NSSite_results ) { + print "model ", $ns_result->model_num, " ", + $ns_result->model_description, "\n"; + while ( my $tree = $ns_result->next_tree ) { + for my $node ( $tree->get_nodes ) { + my $id; + # first we do some work to figure out what the ID should be. + # for a leaf or tip node this is just the taxon label + if( $node->is_Leaf() ) { + $id = $node->id; + } else { + # for the internal nodes it is just the name of all the sub-nodes + # put together, much like how Sanderson represents internal nodes + # in r8s + $id = "(".join(",", map { $_->id } grep { $_->is_Leaf } + $node->get_all_Descendents) .")"; + } + if( ! $node->ancestor || ! $node->has_tag('t') ) { + # skip when no values have been associated with this node + # (like the root node) + next; + } + printf "%s\tt=%.3f\tS=%.1f\tN=%.1f\tdN/dS=%.4f\tdN=%.4f\t". + "dS=%.4f\tS*dS=%.1f\tN*dN=%.1f\n", + $id,map { ($node->get_tag_values($_))[0] } + qw(t S N dN/dS dN dS), 'S*dS', 'N*dN'; + } + } + } + } +
From info at qsv07.com Mon Mar 21 22:37:26 2005 From: info at qsv07.com (info@qsv07.com) Date: Tue Mar 22 01:14:13 2005 Subject: [Bioperl-guts-l] Fw: Message-ID: <20050322033726.26386.qmail@mail.qsv07.com> $B40A4L5NA3NDj!*!*!*(B $B:#$^$G!"El5~8BDj$@$C$?%5%$%H$,(B $B9%I>$K$D$-!"A49q3HBg!*!*:#$,%A%c%s%9$G$9!#(B $B"(%3%3$KEPO?$7$F$k=w$N;R$OK\Ev$G$9!#(B 1.$B5U!{=u4uK>=w@-(B 2.$B#S#M4uK>=w@-(B 3.$B:#F|=P2q$$$?$$=w@-(B 4.$BITNQ4uK>=w@-(B $B$J$I$N=w@-=P2q$$J|Bj(B $BAa$/$7$J$$$H#S#O#L#D!!#O#U#T(B http://loves.qsv20.com/ From lstein at pub.open-bio.org Tue Mar 22 11:54:37 2005 From: lstein at pub.open-bio.org (Lincoln Stein) Date: Tue Mar 22 11:38:50 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/DB/GFF/Adaptor dbi.pm,1.53,1.54 Message-ID: <200503221654.j2MGsbDT013162@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/DB/GFF/Adaptor In directory pub.open-bio.org:/tmp/cvs-serv13153/Bio/DB/GFF/Adaptor Modified Files: dbi.pm Log Message: get_features_by_name() now searches the aliases as well Index: dbi.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/DB/GFF/Adaptor/dbi.pm,v retrieving revision 1.53 retrieving revision 1.54 diff -C2 -d -r1.53 -r1.54 *** dbi.pm 21 Jul 2004 12:57:40 -0000 1.53 --- dbi.pm 22 Mar 2005 16:54:34 -0000 1.54 *************** *** 363,366 **** --- 363,367 ---- make_features_from_part make_features_by_name_where_part + make_features_by_alias_where_part (for aliases) make_features_join_part *************** *** 381,394 **** start=>$location->[1], stop =>$location->[2]}) if $location; ! my $query = "SELECT $select FROM $from WHERE $where AND $join"; ! $query .= " AND $range" if $range; ! my $sth = $self->dbh->do_query($query,@args); my $count = 0; ! while (my @row = $sth->fetchrow_array) { ! $callback->(@row); ! $count++; } ! $sth->finish; return $count; } --- 382,407 ---- start=>$location->[1], stop =>$location->[2]}) if $location; ! # group query ! my $query1 = "SELECT $select FROM $from WHERE $where AND $join"; ! $query1 .= " AND $range" if $range; ! ! # alias query ! $from = $self->make_features_from_part(undef,{attributes=>1}); ! ($where,@args) = $self->make_features_by_alias_where_part($class,$name); # potential bug - @args1==@args2? ! ! my $query2 = "SELECT $select FROM $from WHERE $where AND $join"; ! $query2 .= " AND $range" if $range; my $count = 0; ! ! for my $query ($query1,$query2) { ! my $sth = $self->dbh->do_query($query,@args); ! while (my @row = $sth->fetchrow_array) { ! $callback->(@row); ! $count++; ! } ! $sth->finish; } ! return $count; } *************** *** 1257,1260 **** --- 1270,1285 ---- return ("fgroup.gclass=? AND fgroup.gname=?",$class,$name); } + } + + sub make_features_by_alias_where_part { + my $self = shift; + my ($class,$name) = @_; + if ($name =~ /\*/) { + $name =~ tr/*/%/; + return ("fgroup.gclass=? AND fattribute_to_feature.fattribute_value LIKE ? AND fgroup.gid=fdata.gid AND fattribute.fattribute_name='Alias' AND fattribute_to_feature.fattribute_id=fattribute.fattribute_id AND fattribute_to_feature.fid=fdata.fid AND ftype.ftypeid=fdata.ftypeid",$class,$name) + } else { + return ("fgroup.gclass=? AND fattribute_to_feature.fattribute_value=? AND fgroup.gid=fdata.gid AND fattribute.fattribute_name='Alias' AND fattribute_to_feature.fattribute_id=fattribute.fattribute_id AND fattribute_to_feature.fid=fdata.fid AND ftype.ftypeid=fdata.ftypeid",$class,$name); + } + } From smckay at pub.open-bio.org Thu Mar 24 08:03:27 2005 From: smckay at pub.open-bio.org (Sheldon Mckay) Date: Thu Mar 24 07:47:57 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Tools GFF.pm,1.47,1.48 Message-ID: <200503241303.j2OD3RDT020253@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Tools In directory pub.open-bio.org:/tmp/cvs-serv20214/Bio/Tools Modified Files: GFF.pm Log Message: The script was silently broken by a change to the default behaviour of the Bio::FeatureHolderI::get_all_SeqFeatures method. I also: 1) made some changes to how shared exons are handled in response to the updated GFF3 spec. 2) dealt with labelling problem in gene containment hierarchies derived from third-party (non-refseq) annotations. I think more testing is required. Index: GFF.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Tools/GFF.pm,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -d -r1.47 -r1.48 *** GFF.pm 28 Dec 2004 19:21:39 -0000 1.47 --- GFF.pm 24 Mar 2005 13:03:24 -0000 1.48 *************** *** 1002,1011 **** $name = 'SEQ'; } ! my @groups, ! my @all_tags = $feat->all_tags; for my $tag ( @all_tags ) { my $valuestr; # a string which will hold one or more values ! # for this tag, with quoted free text and ! # space-separated individual values. my @v; for my $value ( $feat->each_tag_value($tag) ) { --- 1002,1017 ---- $name = 'SEQ'; } ! ! my @groups; ! ! # force leading ID and Parent tags ! my @all_tags = grep { !/ID/ && !/Parent/ } $feat->all_tags; ! unshift @all_tags, 'Parent' if $feat->has_tag('Parent'); ! unshift @all_tags, 'ID' if $feat->has_tag('ID'); ! for my $tag ( @all_tags ) { my $valuestr; # a string which will hold one or more values ! # for this tag, with quoted free text and ! # space-separated individual values. my @v; for my $value ( $feat->each_tag_value($tag) ) { *************** *** 1014,1019 **** if ($value =~ /[^a-zA-Z0-9\,\;\=\.:\%\^\*\$\@\!\+\_\?\-]/) { $value =~ s/\t/\\t/g; # substitute tab and newline ! # characters ! $value =~ s/\n/\\n/g; # to their UNIX equivalents # Unescaped quotes are not allowed in GFF3 --- 1020,1025 ---- if ($value =~ /[^a-zA-Z0-9\,\;\=\.:\%\^\*\$\@\!\+\_\?\-]/) { $value =~ s/\t/\\t/g; # substitute tab and newline ! # characters ! $value =~ s/\n/\\n/g; # to their UNIX equivalents # Unescaped quotes are not allowed in GFF3 From smckay at pub.open-bio.org Thu Mar 24 08:03:27 2005 From: smckay at pub.open-bio.org (Sheldon Mckay) Date: Thu Mar 24 07:48:47 2005 Subject: [Bioperl-guts-l] bioperl-live/scripts/Bio-DB-GFF genbank2gff3.PLS, 1.5, 1.6 Message-ID: <200503241303.j2OD3RDT020255@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF In directory pub.open-bio.org:/tmp/cvs-serv20214/scripts/Bio-DB-GFF Modified Files: genbank2gff3.PLS Log Message: The script was silently broken by a change to the default behaviour of the Bio::FeatureHolderI::get_all_SeqFeatures method. I also: 1) made some changes to how shared exons are handled in response to the updated GFF3 spec. 2) dealt with labelling problem in gene containment hierarchies derived from third-party (non-refseq) annotations. I think more testing is required. Index: genbank2gff3.PLS =================================================================== RCS file: /home/repository/bioperl/bioperl-live/scripts/Bio-DB-GFF/genbank2gff3.PLS,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** genbank2gff3.PLS 17 Jan 2005 19:48:57 -0000 1.5 --- genbank2gff3.PLS 24 Mar 2005 13:03:25 -0000 1.6 *************** *** 84,88 **** --- 84,90 ---- use strict; + use lib "$ENV{HOME}/bioperl-live"; use Pod::Usage; + use Bio::Root::RootI; use Bio::SeqIO; use Bio::SeqFeature::Tools::Unflattener; *************** *** 93,97 **** use vars qw/$split @filter $zip $outdir $help $ethresh ! $file @files $dir $summary $nolump/; $| = 1; --- 95,100 ---- use vars qw/$split @filter $zip $outdir $help $ethresh ! $file @files $dir $summary $nolump ! $gene_id $rna_id $tnum %method %id %seen/; $| = 1; *************** *** 159,164 **** $outdir .= '/' unless $outdir =~ m|/$|; - my ($gene_id, $rna_id, $tnum, %method, %id); - for my $file ( @files ) { chomp $file; --- 162,165 ---- *************** *** 184,192 **** my $in = Bio::SeqIO->new(-fh => \*FH, -format => 'GenBank'); while ( my $seq = $in->next_seq ) { my $seq_name = $seq->accession; my $end = $seq->length; ! # arrange disposition of GFF output $outfile = $lump || $outdir . $seq->accession . ".gff"; --- 185,195 ---- my $in = Bio::SeqIO->new(-fh => \*FH, -format => 'GenBank'); + my $gffio = Bio::Tools::GFF->new( -noparse => 1, -gff_version => 3 ); while ( my $seq = $in->next_seq ) { my $seq_name = $seq->accession; my $end = $seq->length; ! my @to_print; ! # arrange disposition of GFF output $outfile = $lump || $outdir . $seq->accession . ".gff"; *************** *** 212,237 **** unflatten_seq($seq); - my $gffio = Bio::Tools::GFF->new( -noparse => 1, -gff_version => 3 ); - # construct a GFF header print $out &gff_header($seq_name, $end); ! for my $feature ($seq->get_all_SeqFeatures) { $feature->source_tag('GenBank'); ! my $method = $feature->primary_tag; ! # unflattened gene parts will have this tag ! if ( $feature->has_tag('gene') ) { ! my $tempstr = &gene_features($feature,$gffio); ! print $out "$tempstr\n" if $tempstr; ! } # otherwise handle as generic feats with IDHandler labels ! else { ! my $tempstr = &generic_features($feature,$gffio,$seq_name); ! print $out "$tempstr\n" if $tempstr; ! } } ! $gffio->close; # deal with the corresponding DNA --- 215,245 ---- unflatten_seq($seq); # construct a GFF header print $out &gff_header($seq_name, $end); ! # Note that we use our own get_all_SeqFeatures function ! # to rescue cloned exons ! for my $feature ( get_all_SeqFeatures($seq) ) { ! $feature->source_tag('GenBank'); ! my $method = $feature->primary_tag; ! # unflattened gene parts will have this tag ! if ( $feature->has_tag('gene') ) { ! my $unique = gene_features($feature); ! push @to_print, $feature if $unique; ! } ! # otherwise handle as generic feats with IDHandler labels ! else { ! my $gff = generic_features($feature,$gffio,$seq_name); ! print $out "$gff\n" if $gff; ! } } ! for my $printme ( @to_print ) { ! my $gff = $gffio->gff_string($printme); ! print $out "$gff\n"; ! } # deal with the corresponding DNA *************** *** 280,284 **** sub gene_features { ! my ($f, $io) = @_; local $_ = $f->primary_tag; $method{$_}++; --- 288,292 ---- sub gene_features { ! my $f = shift; local $_ = $f->primary_tag; $method{$_}++; *************** *** 298,302 **** $f->add_tag_value( Parent => $gene_id ); } ! elsif ( /exon/ || /CDS/ ) { return 0 unless $rna_id; $f->add_tag_value( Parent => $rna_id ); --- 306,310 ---- $f->add_tag_value( Parent => $gene_id ); } ! elsif ( /exon/ || /CDS/ ) { return 0 unless $rna_id; $f->add_tag_value( Parent => $rna_id ); *************** *** 307,311 **** } ! $io->gff_string($f) ; } --- 315,322 ---- } ! # now we can skip cloned exons ! return 0 if /exon/ && ++$seen{$f} > 1; ! ! return 1; } *************** *** 324,328 **** } ! $io->gff_string($f) ; } --- 335,339 ---- } ! $io->gff_string($f); } *************** *** 361,368 **** # map feature types to the sequence ontology $tm->map_types_to_SO( -seq => $seq ); ! 1; } sub filter { my $seq = shift; --- 372,404 ---- # map feature types to the sequence ontology $tm->map_types_to_SO( -seq => $seq ); ! ! # recursively add gene tags if required ! # to rescue unlabelled containment hierarchies ! for my $f ($seq->get_SeqFeatures) { ! if ($f->has_tag('gene')) { ! ($gene_id) = $f->get_tag_values('gene'); ! label_geneparts($f); ! } ! } ! 1; } + sub label_geneparts { + my $g = shift; + + for my $child ( $g->get_SeqFeatures ) { + add_gene($child) unless $child->has_tag('gene'); + for my $grandchild ( $child->get_SeqFeatures ) { + add_gene($grandchild) unless $grandchild->has_tag('gene'); + } + } + } + + sub add_gene { + my $f = shift; + $f->add_tag_value( gene => $gene_id ); + } + sub filter { my $seq = shift; *************** *** 377,378 **** --- 413,452 ---- $seq->add_SeqFeature(@feats) if @feats; } + + + # The default behaviour of Bio::FeatureHolderI:get_all_SeqFeatures + # changed to filter out cloned features. We have to implement the old + # method. These two subroutines were adapted from the v1.4 Bio::FeatureHolderI + sub get_all_SeqFeatures { + my $seq = shift; + my @flatarr; + + foreach my $feat ( $seq->get_SeqFeatures ){ + push(@flatarr,$feat); + _add_flattened_SeqFeatures(\@flatarr,$feat); + } + return @flatarr; + } + + sub _add_flattened_SeqFeatures { + my ($arrayref,$feat) = @_; + my @subs = (); + + if ($feat->isa("Bio::FeatureHolderI")) { + @subs = $feat->get_SeqFeatures; + } + elsif ($feat->isa("Bio::SeqFeatureI")) { + @subs = $feat->sub_SeqFeature; + } + else { + warn ref($feat)." is neither a FeatureHolderI nor a SeqFeatureI. ". + "Don't know how to flatten."; + } + + for my $sub (@subs) { + push(@$arrayref,$sub); + _add_flattened_SeqFeatures($arrayref,$sub); + } + + } + From bugzilla-daemon at portal.open-bio.org Thu Mar 24 12:52:19 2005 From: bugzilla-daemon at portal.open-bio.org (bugzilla-daemon@portal.open-bio.org) Date: Thu Mar 24 13:31:02 2005 Subject: [Bioperl-guts-l] [Bug 1765] Hierarchical location parsing in FTLocationFactory Message-ID: <200503241752.j2OHqJmY013793@portal.open-bio.org> http://bugzilla.open-bio.org/show_bug.cgi?id=1765 ------- Additional Comments From Mark.Hoebeke@jouy.inra.fr 2005-03-24 12:52 ------- Created an attachment (id=204) --> (http://bugzilla.open-bio.org/attachment.cgi?id=204&action=view) Patch with new way of parsing location hierarchies I'm not sure the new patch won't slow down location parsing considerably... ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. From bugzilla-daemon at portal.open-bio.org Thu Mar 24 12:48:07 2005 From: bugzilla-daemon at portal.open-bio.org (bugzilla-daemon@portal.open-bio.org) Date: Thu Mar 24 13:31:09 2005 Subject: [Bioperl-guts-l] [Bug 1765] New: Hierarchical location parsing in FTLocationFactory Message-ID: <200503241748.j2OHm7HI013719@portal.open-bio.org> http://bugzilla.open-bio.org/show_bug.cgi?id=1765 Summary: Hierarchical location parsing in FTLocationFactory Product: Bioperl Version: main-trunk Platform: PC OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: Core Components AssignedTo: bioperl-guts-l@bioperl.org ReportedBy: Mark.Hoebeke@jouy.inra.fr Bio::Factory::FTLocationFactory parses locaction hierarchies incorrectly. Ex : $loc=Bio::Factory::FTLocationFactory->from_string("join(1000..2000,join(3000..4000,join(5000..6000,7000..8000)),9000..10000)"); print $loc->start() Yields : join(3000 Instead of : 1000 ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. From helmuth at doneasy.com Thu Mar 24 18:04:46 2005 From: helmuth at doneasy.com (Shannon Easley) Date: Thu Mar 24 18:05:52 2005 Subject: [Bioperl-guts-l] You've been selected for a low rate Message-ID: Hello, We tried contacting you awhile ago about your low interest morta(ge rate. You have qualified for the lowest rate in years... You could get over $380,000 for as little as $500 a month! Ba(d credit? Doesn't matter, low rates are fixed no matter what! To get a free, no obli,gation consultation click below: http://www.ok-ref-yes.net/nowss.asp Best Regards, Lynne Potts to be remov(ed: http://www.ok-ref-yes.net/gone.asp this process takes one week, so please be patient. we do our best to take your email/s off but you have to fill out a rem/ove or else you will continue to recieve email/s. From bugzilla-daemon at portal.open-bio.org Thu Mar 24 20:33:52 2005 From: bugzilla-daemon at portal.open-bio.org (bugzilla-daemon@portal.open-bio.org) Date: Thu Mar 24 21:30:56 2005 Subject: [Bioperl-guts-l] [Bug 1752] tfasta records not recognized Message-ID: <200503250133.j2P1XqF9021381@portal.open-bio.org> http://bugzilla.open-bio.org/show_bug.cgi?id=1752 jason@open-bio.org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |WONTFIX ------- Additional Comments From jason@open-bio.org 2005-03-24 20:33 ------- this is pretty minor - we'll stick to our guns and say only tfastx and tfasty should be used anyways unless this is absolutely necessary. ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. From info at qsv11.com Fri Mar 25 03:40:36 2005 From: info at qsv11.com (info@qsv11.com) Date: Fri Mar 25 08:16:06 2005 Subject: [Bioperl-guts-l] $BBp5^JX!JBh0l9f!K(B Message-ID: <20050325084036.14944.qmail@mail.qsv05.com> $BEv%5%$%H$N$4MxMQ$OA4$FL5NA!JCK=w6&!o(B0$B1_!K(B $B$d$C$Q$j=P0)$&$J$i$46a=j$G5$7Z$KOC$79g$($k%a!<%k!&%(!{%A%U%l%s%I$,$$$$$G$9$h(B $B$M!#Ev%5%$%H$OA49qCO0hJL$N;TD.BpJs$rBgNL8x3+$7$F$*$j$^$9!#(B From info at qsv11.com Fri Mar 25 03:40:36 2005 From: info at qsv11.com (info@qsv11.com) Date: Fri Mar 25 08:16:09 2005 Subject: [Bioperl-guts-l] $BBp5^JX!JBh0l9f!K(B Message-ID: <20050325084036.14949.qmail@mail.qsv05.com> $BEv%5%$%H$N$4MxMQ$OA4$FL5NA!JCK=w6&!o(B0$B1_!K(B $B$d$C$Q$j=P0)$&$J$i$46a=j$G5$7Z$KOC$79g$($k%a!<%k!&%(!{%A%U%l%s%I$,$$$$$G$9$h(B $B$M!#Ev%5%$%H$OA49qCO0hJL$N;TD.BpJs$rBgNL8x3+$7$F$*$j$^$9!#(B From info at qsv06.com Sat Mar 26 23:26:42 2005 From: info at qsv06.com (info@qsv06.com) Date: Sun Mar 27 06:37:57 2005 Subject: [Bioperl-guts-l] $BBp5^JX!JBh0l9f!K(B Message-ID: <20050327042642.15392.qmail@mail.qsv06.com> $BEv%5%$%H$N$4MxMQ$OA4$FL5NA!JCK=w6&!o(B0$B1_!K(B $B$d$C$Q$j=P0)$&$J$i$46a=j$G5$7Z$KOC$79g$($k%a!<%k!&%(!{%A%U%l%s%I$,$$$$$G$9$h(B $B$M!#Ev%5%$%H$OA49qCO0hJL$N;TD.BpJs$rBgNL8x3+$7$F$*$j$^$9!#(B From info at qsv06.com Sat Mar 26 23:26:43 2005 From: info at qsv06.com (info@qsv06.com) Date: Sun Mar 27 06:38:00 2005 Subject: [Bioperl-guts-l] $BBp5^JX!JBh0l9f!K(B Message-ID: <20050327042643.15399.qmail@mail.qsv06.com> $BEv%5%$%H$N$4MxMQ$OA4$FL5NA!JCK=w6&!o(B0$B1_!K(B $B$d$C$Q$j=P0)$&$J$i$46a=j$G5$7Z$KOC$79g$($k%a!<%k!&%(!{%A%U%l%s%I$,$$$$$G$9$h(B $B$M!#Ev%5%$%H$OA49qCO0hJL$N;TD.BpJs$rBgNL8x3+$7$F$*$j$^$9!#(B From Kerinull at worldnet.att.net Sun Mar 27 19:51:59 2005 From: Kerinull at worldnet.att.net (Sarah Clemons) Date: Sun Mar 27 19:57:23 2005 Subject: [Bioperl-guts-l] Deep Hard backdoor Message-ID: this is it: http://backdoorhoney.com/lola From ophsjsytshd at wt.net Mon Mar 28 15:25:22 2005 From: ophsjsytshd at wt.net (Shelby Mcgrath) Date: Sun Mar 27 23:23:51 2005 Subject: [Bioperl-guts-l] so sensitive and the urge is so god damn tempting, you better slow down Message-ID: <167835285.100887366@[222.88.124.128]> Although I diddnt have a PE problem, I tried Extra-Time because my Girlfri= end is very demanding, she needs to spend at least 30min of bang. I found Extra-Time now alows me to give here the loving she requires. http://puerperal.com/et/?greatp From allenday at pub.open-bio.org Mon Mar 28 20:37:44 2005 From: allenday at pub.open-bio.org (Allen Day) Date: Mon Mar 28 20:21:19 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/SeqFeature Annotated.pm, 1.24, 1.25 Message-ID: <200503290137.j2T1biDT013472@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/SeqFeature In directory pub.open-bio.org:/tmp/cvs-serv13463/SeqFeature Modified Files: Annotated.pm Log Message: don't need this! Index: Annotated.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/SeqFeature/Annotated.pm,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** Annotated.pm 24 Jan 2005 23:50:36 -0000 1.24 --- Annotated.pm 29 Mar 2005 01:37:42 -0000 1.25 *************** *** 174,178 **** $self->remove_Annotations('type'); $self->add_Annotation('type',$term); - $self->add_Annotation('chad',new Bio::Annotation::Comment("tanya")); } else { --- 174,177 ---- From Azure at joannamccarthy.com Mon Mar 28 22:43:32 2005 From: Azure at joannamccarthy.com (Tikva Mcwilliams) Date: Mon Mar 28 22:37:43 2005 Subject: [Bioperl-guts-l] Re: GoodMeddications Message-ID: <200503290337.j2T3bRKr007849@portal.open-bio.org> Hello, Captain Wolverstone. It is a matter which I beg you to reverse awoke in him. Fiercely now he lashed those defenceless shoulders If you mean of the wrongs he suffered at the hands of the Royal Nor iron bars a cage. fight, my lads.... moving amid the azaleas in the garden. It was a fitting setting stump and thongs to which his cane had been reduced, the wretched meeting no one, for already they were on the outskirts of the tow being warped alongside, and he wondered a little what this manoeu remembering that it was his rallying on the last occasion had dri the fact that having conducted the engagement with a skill of whi attempt to scale the wall of the Governor's garden, with the obje TORTUGA Have a nice day. From info at qsv06.com Tue Mar 29 08:29:12 2005 From: info at qsv06.com (info@qsv06.com) Date: Tue Mar 29 12:13:46 2005 Subject: [Bioperl-guts-l] $B!~=P2q$$7OI,>!>pJs!~(B Message-ID: <20050329132912.5902.qmail@mail.qsv06.com> $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B(.(,(/(B $B(.(,(/(B $B(.(,(/(B $B(.(,(/(B $B(-=P(2(,(4$$(2(,(4I,(2(,(4>p(2(,(/(B $B(1(,(42q(2(,(47O(2(,(4>!(2(,(4Js(-(B $B(1(,(0(B $B(1(,(0(B $B(1(,(0(B $B(1(,(0(B $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B $BCN$C$F$^$9$+!)$b!V=P2q$$#P#C!W(B $B!!!!!!!!!!!!!!!!!!!!!!!!(Bhttp://com.deai-pc.com/?num=30010 $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B $B(#(!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!($(B $B(":G("6/("=P("2q("%5("%$("%H("$,("%j("%K("%e("!<("%"("%k("(B $B(&(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(%(B $B("$3("$l("$G("5.("J}("$b("%b("%F("%b("%F("$K("!*("(B $B(&(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(%(B $B!!!!!!!!!!!!!!!!!!!!!!!!(Bhttp://com.deai-pc.com/?num=40010 $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B From info at qsv06.com Tue Mar 29 08:29:12 2005 From: info at qsv06.com (info@qsv06.com) Date: Tue Mar 29 12:13:49 2005 Subject: [Bioperl-guts-l] $B!~=P2q$$7OI,>!>pJs!~(B Message-ID: <20050329132912.5912.qmail@mail.qsv06.com> $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B(.(,(/(B $B(.(,(/(B $B(.(,(/(B $B(.(,(/(B $B(-=P(2(,(4$$(2(,(4I,(2(,(4>p(2(,(/(B $B(1(,(42q(2(,(47O(2(,(4>!(2(,(4Js(-(B $B(1(,(0(B $B(1(,(0(B $B(1(,(0(B $B(1(,(0(B $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B $BCN$C$F$^$9$+!)$b!V=P2q$$#P#C!W(B $B!!!!!!!!!!!!!!!!!!!!!!!!(Bhttp://com.deai-pc.com/?num=30010 $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B $B(#(!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!($(B $B(":G("6/("=P("2q("%5("%$("%H("$,("%j("%K("%e("!<("%"("%k("(B $B(&(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(%(B $B("$3("$l("$G("5.("J}("$b("%b("%F("%b("%F("$K("!*("(B $B(&(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(%(B $B!!!!!!!!!!!!!!!!!!!!!!!!(Bhttp://com.deai-pc.com/?num=40010 $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B From jason at pub.open-bio.org Tue Mar 29 19:57:13 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Tue Mar 29 19:40:26 2005 Subject: [Bioperl-guts-l] bioperl-run/Bio/Tools/Run/Phylo/PAML Codeml.pm, 1.32, 1.33 Message-ID: <200503300057.j2U0vDDT018276@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-run/Bio/Tools/Run/Phylo/PAML In directory pub.open-bio.org:/tmp/cvs-serv18261/Bio/Tools/Run/Phylo/PAML Modified Files: Codeml.pm Log Message: allow omega to varied Index: Codeml.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-run/Bio/Tools/Run/Phylo/PAML/Codeml.pm,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** Codeml.pm 7 Dec 2004 13:03:49 -0000 1.32 --- Codeml.pm 30 Mar 2005 00:57:10 -0000 1.33 *************** *** 289,293 **** 'kappa' => '2', # initial or fixed kappa 'fix_omega'=> [0,1], # 0: estimate omega, 1: fix omega ! 'omega' => [0.4,1], # initial or fixed omega for # codons or codon-base AAs 'fix_alpha'=> [1,0], # 0: estimate gamma shape param --- 289,293 ---- 'kappa' => '2', # initial or fixed kappa 'fix_omega'=> [0,1], # 0: estimate omega, 1: fix omega ! 'omega' => '0.4', # initial or fixed omega for # codons or codon-base AAs 'fix_alpha'=> [1,0], # 0: estimate gamma shape param *************** *** 295,299 **** 'alpha' => '0', # initial of fixed alpha # 0: infinity (constant rate) ! 'Malpha' => [0], # different alphas for genes 'ncatG' => [1..10], # number of categories in # dG of NSsites models --- 295,299 ---- 'alpha' => '0', # initial of fixed alpha # 0: infinity (constant rate) ! 'Malpha' => [0,1], # different alphas for genes 'ncatG' => [1..10], # number of categories in # dG of NSsites models From info at qsv11.com Tue Mar 29 23:18:02 2005 From: info at qsv11.com (info@qsv11.com) Date: Wed Mar 30 03:27:12 2005 Subject: [Bioperl-guts-l] $B!~=P2q$$7OI,>!>pJs!~(B Message-ID: <20050330041802.21357.qmail@mail.qsv05.com> $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B(.(,(/(B $B(.(,(/(B $B(.(,(/(B $B(.(,(/(B $B(-=P(2(,(4$$(2(,(4I,(2(,(4>p(2(,(/(B $B(1(,(42q(2(,(47O(2(,(4>!(2(,(4Js(-(B $B(1(,(0(B $B(1(,(0(B $B(1(,(0(B $B(1(,(0(B $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B $BCN$C$F$^$9$+!)$b!V=P2q$$#P#C!W(B $B!!!!!!!!!!!!!!!!!!!!!!!!(Bhttp://com.deai-pc.com/?num=30010 $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B $B(#(!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!($(B $B(":G("6/("=P("2q("%5("%$("%H("$,("%j("%K("%e("!<("%"("%k("(B $B(&(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(%(B $B("$3("$l("$G("5.("J}("$b("%b("%F("%b("%F("$K("!*("(B $B(&(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(%(B $B!!!!!!!!!!!!!!!!!!!!!!!!(Bhttp://com.deai-pc.com/?num=40010 $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B From info at qsv11.com Tue Mar 29 23:18:01 2005 From: info at qsv11.com (info@qsv11.com) Date: Wed Mar 30 03:27:19 2005 Subject: [Bioperl-guts-l] $B!~=P2q$$7OI,>!>pJs!~(B Message-ID: <20050330041801.21352.qmail@mail.qsv05.com> $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B(.(,(/(B $B(.(,(/(B $B(.(,(/(B $B(.(,(/(B $B(-=P(2(,(4$$(2(,(4I,(2(,(4>p(2(,(/(B $B(1(,(42q(2(,(47O(2(,(4>!(2(,(4Js(-(B $B(1(,(0(B $B(1(,(0(B $B(1(,(0(B $B(1(,(0(B $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B $BCN$C$F$^$9$+!)$b!V=P2q$$#P#C!W(B $B!!!!!!!!!!!!!!!!!!!!!!!!(Bhttp://com.deai-pc.com/?num=30010 $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B $B(#(!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!($(B $B(":G("6/("=P("2q("%5("%$("%H("$,("%j("%K("%e("!<("%"("%k("(B $B(&(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(%(B $B("$3("$l("$G("5.("J}("$b("%b("%F("%b("%F("$K("!*("(B $B(&(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(%(B $B!!!!!!!!!!!!!!!!!!!!!!!!(Bhttp://com.deai-pc.com/?num=40010 $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B From info at qsv06.com Wed Mar 30 08:04:03 2005 From: info at qsv06.com (info@qsv06.com) Date: Wed Mar 30 08:37:58 2005 Subject: [Bioperl-guts-l] $B5.J}$b%b%F%b%F$K$#!*(B Message-ID: <20050330130403.22820.qmail@mail.qsv06.com> $B(#(!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!($(B $B(":G("6/("=P("2q("%5("%$("%H("$,("%j("%K("%e("!<("%"("%k("(B $B(&(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(%(B $B("$3("$l("$G("5.("J}("$b("%b("%F("%b("%F("$K("!*("(B $B(&(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(%(B $B!!!!!!!!!!!!(Bhttp://com.deai-pc.com/?num=40010 $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B(.(,(/(B $B(.(,(/(B $B(.(,(/(B $B(.(,(/(B $B(-2q(2(,(4$A(2(,(4$&(2(,(42q(2(,(/(B $B(1(,(4$((2(,(4$c(2(,(4=P(2(,(4$$(-(B $B(1(,(0(B $B(1(,(0(B $B(1(,(0(B $B(1(,(0(B $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B $B!!!!!!!!!!!!CN$C$F$^$9$+!)$b!V=P2q$$#P#C!W(B $B!!!!!!!!!!!!(Bhttp://com.deai-pc.com/?num=30010 $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B From info at qsv06.com Wed Mar 30 08:04:03 2005 From: info at qsv06.com (info@qsv06.com) Date: Wed Mar 30 08:38:14 2005 Subject: [Bioperl-guts-l] $B5.J}$b%b%F%b%F$K$#!*(B Message-ID: <20050330130403.22825.qmail@mail.qsv06.com> $B(#(!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!(((!($(B $B(":G("6/("=P("2q("%5("%$("%H("$,("%j("%K("%e("!<("%"("%k("(B $B(&(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(+(!(%(B $B("$3("$l("$G("5.("J}("$b("%b("%F("%b("%F("$K("!*("(B $B(&(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(*(!(%(B $B!!!!!!!!!!!!(Bhttp://com.deai-pc.com/?num=40010 $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B(.(,(/(B $B(.(,(/(B $B(.(,(/(B $B(.(,(/(B $B(-2q(2(,(4$A(2(,(4$&(2(,(42q(2(,(/(B $B(1(,(4$((2(,(4$c(2(,(4=P(2(,(4$$(-(B $B(1(,(0(B $B(1(,(0(B $B(1(,(0(B $B(1(,(0(B $B(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(B $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B $B!!!!!!!!!!!!CN$C$F$^$9$+!)$b!V=P2q$$#P#C!W(B $B!!!!!!!!!!!!(Bhttp://com.deai-pc.com/?num=30010 $B"""#!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!="""#(B From bosborne at pub.open-bio.org Wed Mar 30 21:32:11 2005 From: bosborne at pub.open-bio.org (Brian Osborne) Date: Wed Mar 30 21:15:41 2005 Subject: [Bioperl-guts-l] bioperl-live/doc/howto/sgml Feature-Annotation.xml, 1.5, 1.6 Message-ID: <200503310232.j2V2WBDT022614@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/doc/howto/sgml In directory pub.open-bio.org:/tmp/cvs-serv22605 Modified Files: Feature-Annotation.xml Log Message: Add mention of DBLink Index: Feature-Annotation.xml =================================================================== RCS file: /home/repository/bioperl/bioperl-live/doc/howto/sgml/Feature-Annotation.xml,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** Feature-Annotation.xml 16 Mar 2005 01:58:56 -0000 1.5 --- Feature-Annotation.xml 31 Mar 2005 02:32:08 -0000 1.6 *************** *** 289,293 **** object. Think of it as the default SeqFeature object. Now, should you care what kind of object is being made? For the most ! part, no, you can write lots of useful and powerful Bioperl code without ever knowing these specific details.
--- 289,293 ---- object. Think of it as the default SeqFeature object. Now, should you care what kind of object is being made? For the most ! part no, you can write lots of useful and powerful Bioperl code without ever knowing these specific details.
*************** *** 488,492 **** It's not unusual for a Genbank file to have multiple CDS or gene features (and recall that 'CDS' and 'gene' are common primary tags ! in Genbank format), each with a number of tags, like 'note', 'protein_id', or 'product'. How can we get, say, the nucleotide sequences and gene names from all these CDS features? By putting all of this together we --- 488,493 ---- It's not unusual for a Genbank file to have multiple CDS or gene features (and recall that 'CDS' and 'gene' are common primary tags ! in Genbank format), each with a number of tags, like 'note', ! 'protein_id', or 'product'. How can we get, say, the nucleotide sequences and gene names from all these CDS features? By putting all of this together we *************** *** 694,702 **** Annotations from Genbank ! There's still quite a bit of data left our Genbank files that's ! not in SeqFeature objects, and much of it is parsed into Annotation objects. In order to get access to these objects we can get an AnnotationCollection object, which is exactly what it sounds like: --- 695,707 ---- Annotations from Genbank ! There's still quite a bit of data left in our Genbank files that's ! not in SeqFeature objects, and much of it is parsed into ! Annotation objects. Annotations, if you recall, are those values ! that are assigned to a sequence that have no specific location ! on that sequence. In order to get access to these objects we can get an AnnotationCollection object, which is exactly what it sounds like: + *************** *** 706,713 **** --- 711,720 ---- + Now we can access each Annotation in the AnnotationCollection object. The Annotation objects can be retrieved in arrays: + *************** *** 722,725 **** --- 729,733 ---- + It turns out the value of $key, above, and *************** *** 738,741 **** --- 746,750 ---- + If you only wanted a specific annotation, like COMMENT, you *************** *** 762,798 **** ! Genbank Annotations ! ! ! Genbank TextKeyObject TypeNote ! ! ! ! COMMENTcommentComment ! ! ! SEGMENTsegmentSimpleValuee.g. ! "1 of 2" ! ! ! ORIGINoriginSimpleValuee.g. ! "X Chromosome." ! ! ! REFERENCEreferenceReference ! ! ! INVdate_changedSimpleValuee.g. ! "08-JUL-1994" ! ! ! KEYWORDSkeywordSimpleValue ! ! ! ACCESSIONsecondary_accessionSimpleValue2nd ! of 2 accessions ! ! !
--- 771,811 ---- ! Genbank Annotations ! ! ! Genbank TextKeyObject TypeNote ! ! ! ! COMMENTcommentComment ! ! ! SEGMENTsegmentSimpleValuee.g. ! "1 of 2" ! ! ! ORIGINoriginSimpleValuee.g. ! "X Chromosome." ! ! ! REFERENCEreferenceReference ! ! ! INVdate_changedSimpleValuee.g. ! "08-JUL-1994" ! ! ! KEYWORDSkeywordSimpleValue ! ! ! ACCESSIONsecondary_accessionSimpleValue2nd ! of 2 accessions ! ! ! DBSOURCEdblinkDBLinkLink ! to entry in a database ! ! !
From Jenkins at roanokemail.com Wed Mar 30 18:34:56 2005 From: Jenkins at roanokemail.com (Berntsson Robert) Date: Thu Mar 31 01:27:32 2005 Subject: [Bioperl-guts-l] Re[8]: talk with our tabs Message-ID: <628a01c535bb$0056e1a7$c9754ace@minister.com> arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas ur Se ire and rm vol 500 100 ural and de Eff - in con t to wel wn bra % Nat No Si ects tras l-kno nds. Expe ce thr es lon gas rien ee tim ger or ms Wor de shi g wit hou ld Wi ppin hin 24 rs SP -M UR The we and Saf Wa Ph acy is Ne st The est y of arm Inc e Yo xual Des Spe ume by % reas From andrew at pub.open-bio.org Thu Mar 31 03:55:33 2005 From: andrew at pub.open-bio.org (Andrew Macgregor) Date: Thu Mar 31 03:38:37 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/Cluster UniGene.pm, 1.31, 1.32 UniGeneI.pm, 1.11, 1.12 Message-ID: <200503310855.j2V8tXDT024197@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/Cluster In directory pub.open-bio.org:/tmp/cvs-serv24181 Modified Files: UniGene.pm UniGeneI.pm Log Message: Added support for restr_expr line and peripheral value in seq lines Added further species to species map Index: UniGene.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Cluster/UniGene.pm,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** UniGene.pm 11 Aug 2004 07:25:00 -0000 1.31 --- UniGene.pm 31 Mar 2005 08:55:31 -0000 1.32 *************** *** 203,206 **** --- 203,208 ---- 'Cin' => "Ciona intestinalis", 'Cre' => "Chlamydomonas reinhardtii", + 'Csa' => "Ciona savignyi", + 'Csi' => "Citrus sinensis", 'Ddi' => "Dictyostelium discoideum", 'Dr' => "Danio rerio", *************** *** 216,221 **** --- 218,225 ---- 'Lsa' => "Lactuca sativa", 'Mdo' => "Malus x domestica", + 'Mgr' => "Magnaporthe grisea", 'Mm' => "Mus musculus", 'Mtr' => "Medicago truncatula", + 'Ncr' => "Neurospora crassa", 'Oar' => "Ovis aries", 'Omy' => "Oncorhynchus mykiss", *************** *** 236,244 **** 'Ta' => "Triticum aestivum", 'Tgo' => "Toxoplasma gondii", 'Vvi' => "Vitis vinifera", 'Xl' => "Xenopus laevis", 'Zm' => "Zea mays", ); ! =head2 new --- 240,249 ---- 'Ta' => "Triticum aestivum", 'Tgo' => "Toxoplasma gondii", + 'Tru' => "Takifugu rubripes", 'Vvi' => "Vitis vinifera", 'Xl' => "Xenopus laevis", 'Zm' => "Zea mays", ); ! =head2 new *************** *** 450,453 **** --- 455,475 ---- my $self = shift; return $self->_annotation_value('homol', @_); + } + + + =head2 restr_expr + + Title : restr_expr + Usage : restr_expr(); + Function: Returns the restr_expr entry associated with the object. + Example : $restr_expr = $unigene->restr_expr or $unigene->restr_expr($restr_expr) + Returns : A string + Args : None or a restr_expr entry + + =cut + + sub restr_expr { + my $self = shift; + return $self->_annotation_value('restr_expr', @_); } Index: UniGeneI.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/Cluster/UniGeneI.pm,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** UniGeneI.pm 14 Jul 2004 05:11:06 -0000 1.11 --- UniGeneI.pm 31 Mar 2005 08:55:31 -0000 1.12 *************** *** 207,210 **** --- 207,227 ---- + =head2 restr_expr + + Title : restr_expr + Usage : restr_expr(); + Function: Returns the restr_expr entry associated with the object. + Example : $restr_expr = $unigene->restr_expr or $unigene->restr_expr($restr_expr) + Returns : A string + Args : None or a restr_expr entry + + =cut + + sub restr_expr { + my ($self) = @_; + $self->throw_not_implemented; + } + + =head2 gnm_terminus From andrew at pub.open-bio.org Thu Mar 31 03:56:01 2005 From: andrew at pub.open-bio.org (Andrew Macgregor) Date: Thu Mar 31 03:39:01 2005 Subject: [Bioperl-guts-l] bioperl-live/Bio/ClusterIO unigene.pm,1.21,1.22 Message-ID: <200503310856.j2V8u1DT024232@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/Bio/ClusterIO In directory pub.open-bio.org:/tmp/cvs-serv24221 Modified Files: unigene.pm Log Message: Added support for restr_expr line and peripheral value in seq lines Added further species to species map Index: unigene.pm =================================================================== RCS file: /home/repository/bioperl/bioperl-live/Bio/ClusterIO/unigene.pm,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** unigene.pm 11 Aug 2004 07:34:20 -0000 1.21 --- unigene.pm 31 Mar 2005 08:55:59 -0000 1.22 *************** *** 83,86 **** --- 83,87 ---- HOMOL => q/HOMOL\s+(\S.*)/, EXPRESS => q/EXPRESS\s+(\S.*)/, + RESTR_EXPR => q/RESTR_EXPR\s+(\S.*)/, GNM_TERMINUS => q/GNM_TERMINUS\s+(\S.*)/, CHROMOSOME => q/CHROMOSOME\s+(\S.*)/, *************** *** 99,102 **** --- 100,104 ---- SEQTYPE => q/SEQTYPE=\s*(\S.*)/, TRACE => q/TRACE=\s*(\S.*)/, + PERIPHERAL => q/PERIPHERAL=\s*(\S.*)/, DELIMITER => q/^\/\// ); *************** *** 175,178 **** --- 177,183 ---- @express = split /\s*;/, $express; } + elsif ($line =~ /$line_is{RESTR_EXPR}/gcx) { + $unigene{RESTR_EXPR} = $1; + } elsif ($line =~ /$line_is{GNM_TERMINUS}/gcx) { $unigene{GNM_TERMINUS} = $1; *************** *** 229,232 **** --- 234,240 ---- $seq->{trace} = $1; } + elsif (/$line_is{PERIPHERAL}/gcx) { + $seq->{peripheral} = $1; + } } push @sequence, $seq; *************** *** 245,248 **** --- 253,257 ---- $UGobj->homol($unigene{HOMOL}) if defined ($unigene{HOMOL}); $UGobj->express(\@express); + $UGobj->restr_expr($unigene{RESTR_EXPR}) if defined ($unigene{RESTR_EXPR}); $UGobj->gnm_terminus($unigene{GNM_TERMINUS}) if defined ($unigene{GNM_TERMINUS}); $UGobj->chromosome(\@chromosome); From andrew at pub.open-bio.org Thu Mar 31 03:56:53 2005 From: andrew at pub.open-bio.org (Andrew Macgregor) Date: Thu Mar 31 03:39:53 2005 Subject: [Bioperl-guts-l] bioperl-live/t UniGene.t,1.14,1.15 Message-ID: <200503310856.j2V8urDT024271@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/t In directory pub.open-bio.org:/tmp/cvs-serv24255/t Modified Files: UniGene.t Log Message: Altered test to include restr_expr line and a peripheral value in a seq line Index: UniGene.t =================================================================== RCS file: /home/repository/bioperl/bioperl-live/t/UniGene.t,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** UniGene.t 14 Jul 2004 05:11:06 -0000 1.14 --- UniGene.t 31 Mar 2005 08:56:50 -0000 1.15 *************** *** 24,28 **** use Test; ! $NUMTESTS = 63; plan tests => $NUMTESTS; --- 24,28 ---- use Test; ! $NUMTESTS = 65; plan tests => $NUMTESTS; *************** *** 55,58 **** --- 55,59 ---- ok($unigene->gnm_terminus,'S'); ok($unigene->homol,'YES'); + ok($unigene->restr_expr,'liver'); ok($unigene->scount,26); ok(scalar @{ $unigene->locuslink }, 1); *************** *** 111,114 **** --- 112,118 ---- $unigene->homol('homol_test'); ok($unigene->homol, 'homol_test', 'homol was ' . $unigene->homol); + + $unigene->restr_expr('restr_expr_test'); + ok($unigene->restr_expr, 'restr_expr_test', 'restr_expr was ' . $unigene->restr_expr); $unigene->scount('scount_test'); From andrew at pub.open-bio.org Thu Mar 31 03:56:53 2005 From: andrew at pub.open-bio.org (Andrew Macgregor) Date: Thu Mar 31 03:39:54 2005 Subject: [Bioperl-guts-l] bioperl-live/t/data unigene.data,1.6,1.7 Message-ID: <200503310856.j2V8urDT024275@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/t/data In directory pub.open-bio.org:/tmp/cvs-serv24255/t/data Modified Files: unigene.data Log Message: Altered test to include restr_expr line and a peripheral value in a seq line Index: unigene.data =================================================================== RCS file: /home/repository/bioperl/bioperl-live/t/data/unigene.data,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** unigene.data 14 Jul 2004 05:11:06 -0000 1.6 --- unigene.data 31 Mar 2005 08:56:51 -0000 1.7 *************** *** 6,9 **** --- 6,10 ---- HOMOL YES EXPRESS liver ; hepatocellular carcinoma ; adenocarcinoma ; corresponding non cancerous liver tissue ; Liver ; colon ; Cell lines + RESTR_EXPR liver GNM_TERMINUS S CHROMOSOME 8 *************** *** 21,25 **** PROTSIM ORG=Rattus norvegicus; PROTGI=16758720; PROTID=ref:NP_446306.1; PCT=73.79; ALN=290 SCOUNT 26 ! SEQUENCE ACC=BX095770.1; NID=g27827877; CLONE=IMAGp998I184581_,_IMAGE:1870937; LID=1079; SEQTYPE=EST SEQUENCE ACC=AI262683.1; NID=g3870886; CLONE=IMAGE:1870937; END=3'; LID=1079; SEQTYPE=EST SEQUENCE ACC=CB161982.1; NID=g28148108; CLONE=L17N670205n1-15-F12; END=5'; LID=12542; SEQTYPE=EST --- 22,26 ---- PROTSIM ORG=Rattus norvegicus; PROTGI=16758720; PROTID=ref:NP_446306.1; PCT=73.79; ALN=290 SCOUNT 26 ! SEQUENCE ACC=BX095770.1; NID=g27827877; CLONE=IMAGp998I184581_,_IMAGE:1870937; LID=1079; SEQTYPE=EST; PERIPHERAL=1 SEQUENCE ACC=AI262683.1; NID=g3870886; CLONE=IMAGE:1870937; END=3'; LID=1079; SEQTYPE=EST SEQUENCE ACC=CB161982.1; NID=g28148108; CLONE=L17N670205n1-15-F12; END=5'; LID=12542; SEQTYPE=EST From jason at pub.open-bio.org Thu Mar 31 13:32:04 2005 From: jason at pub.open-bio.org (Jason Stajich) Date: Thu Mar 31 13:15:25 2005 Subject: [Bioperl-guts-l] bioperl-live/t TreeIO.t,1.29,1.30 Message-ID: <200503311832.j2VIW4DT026028@pub.open-bio.org> Update of /home/repository/bioperl/bioperl-live/t In directory pub.open-bio.org:/tmp/cvs-serv26012/t Modified Files: TreeIO.t Log Message: fix tests for now - I think this is okay... Index: TreeIO.t =================================================================== RCS file: /home/repository/bioperl/bioperl-live/t/TreeIO.t,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** TreeIO.t 25 Jan 2005 12:04:58 -0000 1.29 --- TreeIO.t 31 Mar 2005 18:32:02 -0000 1.30 *************** *** 180,184 **** @leaves = $tree->get_leaf_nodes; ok(@leaves, 13); ! ok(@nodes, 24); ($node) = $tree->find_node(-id => '18'); ok($node); --- 180,184 ---- @leaves = $tree->get_leaf_nodes; ok(@leaves, 13); ! ok(@nodes, 25); ($node) = $tree->find_node(-id => '18'); ok($node); *************** *** 199,203 **** @leaves = $tree->get_leaf_nodes; ok(@leaves, 13); ! ok(@nodes, 24); ($node) = $tree->find_node('18'); ok($node->id, '18'); --- 199,203 ---- @leaves = $tree->get_leaf_nodes; ok(@leaves, 13); ! ok(@nodes, 25); ($node) = $tree->find_node('18'); ok($node->id, '18'); *************** *** 221,225 **** ok(@leaves, 13, scalar @leaves); ! ok(@nodes, 24, scalar @leaves); ($node) = $tree->find_node('18'); ok($node->id, '18'); --- 221,225 ---- ok(@leaves, 13, scalar @leaves); ! ok(@nodes, 25, scalar @nodes); ($node) = $tree->find_node('18'); ok($node->id, '18'); From info at qsv04.com Thu Mar 31 23:04:20 2005 From: info at qsv04.com (info@qsv04.com) Date: Fri Apr 1 04:20:01 2005 Subject: [Bioperl-guts-l] $B $B!{!,!,!#(B $B(,(,(,(,(,(,(,(,(,(,!{(B $B(,(,(,(,(,!{(,(,(,(,(,(,(,(,(,(B $B!,!!#o!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!(B $B#o!!(B $B!!(B $B!!!!(B $B#o!,!!!!!E!D(,!!=P!!2q!!$$!!(BPC$B!!(B $B(,!D!E!!!!!!(B $B!!!!!!(B $B!{!!!!#o!!!!!,#o!!!!(B $B!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(B $B(,(,(,!!!{!!#o!!(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,(,!!!{!!(B $B!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1(B $B!!!!!!!!!!!!!!!!(B $BK\5$$G0)$($k!!$*4+$a%5%$%H(B $B(#(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!(!($(B $B!!!!!!!!!!!!!!!!"!B~:#%]%$%s%HBgI}%5!<%S%9Cf"!(B $B!!!!!!!!!!(B $B!!!!!XK\5$!Y$G%d%j$?$$$J$i!"$^$:$O$46a=j8!:w$G$3$A$i$+$i(B $B!!!!!!!!!!"-!!"-!!"-!!"-!!"-!!"-!!"-!!"-!!"-!!"-!!"-(B $B!!!!!!(Bhttp://com.deai-pc.com/?num=5001 $B!|%5%$%HFb=q$-9~$_>R2p(B $B!&$f$-!'(B22$B:P!!!XNx?MJg=8!Y(B $B:#F|$_$?$$$JF|$OBg9%$-$J?M$H0l=o$K$$$?$$$J$!!y$:$C$H(B $B$/$C$D$$$F%$%A%c%$%A%c$9$k$s$@$!"v$=$s$J$U$&$K$7$F$/$l$k?M(B $BC5$7$F$k%h!*%i%V$b$7$?$$$J$!!A!y(B $B!&??F`H~!'(B20$B:P!!!XM7$SAjpJs$r$*