Minor edits
[bioperl-network.git] / t / ProteinNet.t
bloba76f7a6d65c3060ef7b5053960669f2626ebbc58
1 # This is -*-Perl-*- code#
2 # Bioperl Test Harness Script for Modules
4 use strict;
6 BEGIN {
7         use Bio::Root::Test;
8         test_begin(-tests => 171,
9                            -requires_module => 'Graph',
10                            -requires_module => 'XML::Twig' );
12         use_ok('Bio::Network::ProteinNet');
13         use_ok('Bio::Network::IO');
16 my $verbose = test_debug();
19 # read old DIP format
21 my $io = Bio::Network::IO->new(
22   -format => 'dip_tab',
23   -file   => test_input_file("tab1part.tab"),
24   -threshold => 0.6);
25 ok(defined $io);
26 ok my $g1 = $io->next_network();
27 ok my $node = $g1->get_nodes_by_id('PIR:A64696');
28 my @proteins = $node->proteins;
29 ok $proteins[0]->accession_number eq 'PIR:A64696';
30 ok $node = $g1->nodes_by_id('PIR:A64696');
31 @proteins = $node->proteins;
32 ok $proteins[0]->accession_number eq 'PIR:A64696';
33 my %ids = $g1->get_ids_by_node($node);
34 my $x = 0;
35 my @ids = qw(A64696 2314583 3053N);
36 for my $k (keys %ids) {
37         ok ( $ids{$k} eq $ids[$x++] );
40 # test deleting nodes
42 ok $g1->edges == 79;
43 ok $g1->vertices == 76;
44 # now remove 2 nodes: this removes 4 edges
45 my $g2 = $g1->delete_vertices($g1->get_nodes_by_id('DIP:3082N'), 
46                                                                            $g1->get_nodes_by_id('DIP:3083N') );
47 ok $g2->edges == 75;
48 ok $g2->vertices == 74;
50 # test for identifiers and Annotations
52 ok $node = $g1->get_nodes_by_id('PIR:A64696');
53 @proteins = $node->proteins;
54 ok $proteins[0]->accession_number eq 'PIR:A64696';
55 my $ac = $proteins[0]->annotation;
56 @ids = $ac->get_Annotations('dblink');
57 ok $ids[0]->primary_id eq "A64696";
58 ok $ids[1]->primary_id eq "3053N";
59 ok $ids[2]->primary_id eq "2314583";
61 # test some basic graph properties from Graph
63 ok sprintf("%.3f",$g2->density), "0.028";
64 ok $g2->is_connected eq "";
65 ok $g2->is_forest eq "";
66 ok $g2->is_tree eq "";
67 ok $g2->is_empty eq "";
68 ok $g2->is_cyclic == 1;
69 ok $g2->expect_undirected;
71 # get connected subgraphs
73 my @components = $g2->connected_components();
74 ok scalar @components == 7;
76 # before deleting 3048N, 3047N has 2 neighbours
78 my @n1 = $g2->neighbors($g2->get_nodes_by_id('DIP:3047N'));
79 ok scalar @n1 == 2;
81 ok $g2->delete_vertices($g2->get_nodes_by_id('DIP:3048N'));
83 # after deleting there is only 1 interactor
85 @n1 = $g2->neighbors($g2->get_nodes_by_id('DIP:3047N'));
86 ok scalar @n1 == 1;
87 my $ncount = $g2->neighbor_count($g2->get_nodes_by_id('DIP:3047N'));
88 ok $ncount == 1;
90 # check that no undefs are left after node removal 
92 my @edges = $g2->edges;
93 for my $edgeref (@edges) {
94         my %interactions = $g2->get_interactions(@$edgeref);
95         for my $interaction (values %interactions) {
96                 ok $interaction->primary_id;
97         }
100 # get an Interaction by its id
102 ok my $interx = $g2->get_interaction_by_id('DIP:4368E');
103 ok $interx->primary_id eq 'DIP:4368E';
105 # count all edges
107 my $count = 0;
108 ok $g2->edges == 74;
110 my @n = $g2->neighbors($g2->get_nodes_by_id('DIP:3075N'));
111 ok scalar @n == 12;
113 ok $g2->remove_nodes($g2->get_nodes_by_id('DIP:3075N'));
114 ok scalar $g2->edges == 62;
116 # test connected_components
118 @components = $g2->connected_components();
119 ok scalar @components == 17;
121 # test isolated_vertices
123 my @ucnodes = $g2->isolated_vertices;
124 ok scalar @ucnodes == 10;
126 # test clustering_coefficent
128 ok  sprintf("%.3f", $g2->clustering_coefficient($g2->get_nodes_by_id('PIR:B64525'))) == 0.022;
130 # test get_nodes_by_id() method
132 ok defined $g2->get_nodes_by_id('PIR:B64525');
133 is $g2->get_nodes_by_id('B64'), undef;
135 # test subgraph
137 $io = Bio::Network::IO->new
138 (-format => 'psi10',
139  -file   => test_input_file("bovin_small_intact.xml"));
140 my $g = $io->next_network();
141 ok $g->edges == 15;
142 ok $g->nodes == 23;
144 @ids = qw(EBI-354674 EBI-444335 EBI-349968 EBI-354657
145                          EBI-302230 EBI-640775 EBI-640793 EBI-79764);
146 my @nodes = $g->get_nodes_by_id(@ids);
147 ok scalar @nodes == 8;
148 my $sg = $g->subgraph(@nodes);
149 ok $sg->edges == 5;
150 ok $sg->nodes == 8;
152 @nodes = $g->get_nodes_by_id($ids[0]);
153 $sg = $g->subgraph(@nodes);
154 ok $sg->edges == 0;
155 ok $sg->nodes == 1;
157 # test internal method _all_pairs()
159 my @pairs = $g->_all_pairs(@ids);
160 ok $#pairs == 27;
161 @pairs = $g->_all_pairs("A","B");
162 ok scalar @pairs == 1;
164 # test the add_interactions_from() method
166 $io = Bio::Network::IO->new
167     (-format => 'dip_tab',
168      -file   => test_input_file("tab4part.tab"));
169 $g1 = $io->next_network();
171 my $io2 = Bio::Network::IO->new
172     (-format => 'dip_tab',
173      -file   => test_input_file("tab3part.tab"));
174 $g2 = $io2->next_network();
176 ok $g1->edges == 5;
177 ok $g1->nodes == 7;
178 ok $g2->edges == 3;
179 ok $g2->nodes == 5;
181 ok my $node1 = $g1->get_nodes_by_id("UniProt:Q09472");
182 ok my $node2 =  $g1->get_nodes_by_id("UniProt:P04637");
183 my %interx = $g1->get_interactions($node1,$node2);
184 ok scalar keys %interx == 1;
186 ok $node1 = $g1->get_nodes_by_id("UniProt:P10243");
187 ok $node2 =     $g1->get_nodes_by_id("GenBank:2134877");
188 %interx = $g1->get_interactions($node1,$node2);
189 ok scalar keys %interx == 1;
191 is my $ix = $g1->get_interaction_by_id("DIP:16E"), undef;
192 is $ix = $g1->get_interaction_by_id("DIP:19E"), undef;
194 $g1->add_interactions_from($g2);
196 # $g1 should have 2 more Interactions with new interaction ids and
197 # the same number of nodes and edges, $g2 should be unaffected
199 ok $g1->edges == 5;
200 ok $g1->nodes == 7;
201 ok $g2->edges == 3;
202 ok $g2->nodes == 5;
204 ok $node1 = $g1->get_nodes_by_id("UniProt:Q09472");
205 ok $node2 =     $g1->get_nodes_by_id("UniProt:P04637");
206 %interx = $g1->get_interactions($node1,$node2);
207 ok scalar keys %interx == 2;
209 ok $node1 = $g1->get_nodes_by_id("UniProt:P10243");
210 ok $node2 =     $g1->get_nodes_by_id("GenBank:2134877");
211 %interx = $g1->get_interactions($node1,$node2);
212 ok scalar keys %interx == 2;
214 ok $ix = $g1->get_interaction_by_id("DIP:16E");
215 ok $ix->weight == 3;
216 ok $ix = $g1->get_interaction_by_id("DIP:19E");
217 ok $ix->weight == 12;
219 # test that removing a node removes its edges correctly
221 ok $io = Bio::Network::IO->new
222   (-format => 'psi10',
223         -file   => test_input_file("sv40_small.xml"));
224 ok $g1 = $io->next_network();
225 ok $g1->edge_count == 3;
226 ok $g1->node_count == 5;
227 ok $g1->is_connected == 0;
228 @components = $g1->connected_components;
229 ok scalar @components == 2;
231 my $n = $g1->get_nodes_by_id("EBI-617321");
232 my @ns = $g1->edges_at($n);
233 ok scalar @ns == 2;
234 $g1->remove_nodes($n);
235 ok $g1->edge_count == 1;
236 ok $g1->node_count == 4;
237 @components = $g1->connected_components;
238 ok scalar @components == 3;
239 @ns = $g1->isolated_vertices;
240 ok scalar @ns == 2;
241 @ns = $g1->unconnected_nodes;
242 ok scalar @ns == 2;
243 @ns = $g1->self_loop_vertices;
244 ok @ns == 0;
246 # test components
248 @components = $g1->components;
249 ok scalar @components == 3;
251 # random
253 $n = $g1->get_random_node;
254 isa_ok( $n, 'Bio::Network::Node');
255 my $e = $g1->get_random_edge;
256 isa_ok( $e->[0], 'Bio::Network::Node');
258 __END__
260 Need to test:
262 _get_ids