sub _read_network
{ my $self = shift;
my $filename = shift;
my %parameters = @_;
my $property = '';
if (exists $parameters{property}) {
$property = $parameters{property};
}
my $edge_property = '';
if (exists $parameters{edge_property}) {
$edge_property = $parameters{edge_property};
}
my $sample_size = 0;
if (exists $parameters{sample}) {
$sample_size = $parameters{sample};
}
my $delim = "[\t ]+";
if (exists $parameters{delim}) {
$delim = $parameters{delim};
}
my $unionfind = 0;
if (exists $parameters{unionfind}) {
$unionfind = $parameters{unionfind};
}
my $directed = 1;
if ( (exists $parameters{directed} and $parameters{directed} == 0) ||
(exists $parameters{undirected} and $parameters{undirected} == 1) ) {
$directed = 0;
}
my $graph_class = "";
if (exists $parameters{graph}) {
$graph_class = $parameters{graph};
}
my $filebased = 0;
if (exists $parameters{filebased} and $parameters{filebased} == 1) {
$filebased = 1;
}
my $net;
if ($graph_class ne "") {
$net = new Clair::Network(graph => $graph_class,
directed => $directed,
unionfind => $unionfind,
filebased => $filebased);
} else {
$net = new Clair::Network(directed => $directed,
unionfind => $unionfind,
filebased => $filebased);
}
open(FIN, $filename) or die "Couldn't open $filename: $!\n";
while (<FIN>) {
chomp;
my @edge = split(/$delim/);
my ($u_id, $v_id, $weight) = @edge;
my $add_u = $u_id;
my $add_v = $v_id;
if ((defined $add_u) and (defined $add_v)) {
$net->add_edge($add_u, $add_v);
if ($property ne "") {
$net->set_edge_attribute($add_u, $add_v, $property, 1);
}
# Add weight if needed if (defined $weight) {
if ($net->{graph}->has_edge($add_u, $add_v)) {
$net->set_edge_weight($add_u, $add_v, $weight);
# Custom edge property if ($edge_property ne "") {
$net->set_edge_attribute($add_u, $add_v, $edge_property, $weight);
}
}
}
}elsif ((defined $add_u) or (defined $add_v)) {
if ( (defined $add_u) && ! $net->has_node($add_u)){
$net->add_node($add_u);
}elsif( (defined $add_v) && ! $net->has_node($add_u)){
$net->add_node($add_v);
}
}
}
return $net;} |