source: CytoscapeRPC/scripts/Examples/perl.pl

Last change on this file was 127, checked in by j.j.bot@…, 6 years ago

Removed SOAP exampels.

File size: 5.2 KB
Line 
1#!/usr/bin/perl
2
3# An example of how to call CytoscapeRPC from Perl.
4# Jan Bot | 27/04/2010
5# Modified & cleaned 18/08/2010
6
7use strict;
8use warnings;
9use Frontier::RPC2;
10use Frontier::Client;
11
12# Tell Frontier where the server lives
13my $url = "http://localhost:9000/Cytoscape";
14my $client = Frontier::Client->new( url     => $url,
15                                    debug   => 0,
16                                    );
17
18# We need a coder because of the 'intelligent' var casting in perl
19my $coder = Frontier::RPC2->new;
20
21# Create a network to work with
22print "Creating network\n";
23my $networkID = $client->call(
24        'Cytoscape.createNetwork',      # function name
25        'Perl Test Network'             # name of the network to create
26);
27
28# Lets see if the name we gave the network is still the same
29my $networkTitle = $client->call(
30        'Cytoscape.getNetworkTitle',    # function name
31        $coder->string("$networkID")    # identifier of the network
32);
33print $networkTitle, "\n";
34
35# Create some nodes.
36print "Creating nodes\n";
37my $done = $client->call(
38        'Cytoscape.createNodes',        # function name
39        ["a", "b", "c", "d", "e", "f", "g"] # list of node names
40);
41print "Done adding nodes.\n";
42my $nrNodes = $client->call('Cytoscape.countAllNodes');
43print "There are now ", $nrNodes, " nodes present in Cytoscape.\n";
44
45# Add some attributes.
46print "Adding attributes\n";
47$done = $client->call(
48        'Cytoscape.addNodeAttributes',  # function name
49        $coder->string("str"),          # name of the attribute to add
50        $coder->string("STRING"),       # type of the attribute
51        {                               # hash of key-value pairs for the
52            'a' => 'aa',                # attributes
53            'b' => 'aa',
54            'c' => 'bb',
55            'd' => 'ee',
56            'e' => 'cc',
57            'f' => 'cc',
58            'g' => 'cc'
59        },
60        $coder->boolean(1)              # forgive parameter
61);
62
63$done = $client->call(
64    'Cytoscape.addNodeAttributes',
65    $coder->string('nr'),
66    $coder->string("FLOATING"),
67    {
68        'a' => 1.10,
69        'b' => 2.10,
70        'c' => 3.10,
71        'd' => 4.10,
72        'e' => 5.10,
73        'f' => 6.10,
74        'g' => 7.10
75    },
76    $coder->boolean(1)
77);
78
79# Add edges
80print "Adding edges.\n";
81my @from = ("b", "b", "c", "d", "d", "d", "d");
82my @to =   ("b", "c", "d", "a", "e", "f", "g");
83my @type = ("relation") x 7;
84my @directed = ($coder->boolean(1)) x 7;
85my $edge_ids = $client->call(
86        'Cytoscape.createEdges',        # function name
87        $coder->string("$networkID"),   # identifier of the network
88        \@from,                         # list of node names (from)
89        \@to,                           # list of node names (to)
90        \@type,                         # list of types of the edges
91        \@directed,                     # list of booleans
92        $coder->boolean(1)              # forgive parameter
93);
94print "Done adding edges.\n";
95my $nrEdges = $client->call("Cytoscape.countAllEdges");
96print "There are now " . $nrEdges . " edges present in Cytoscape.\n";
97
98my %edge_attrs;
99foreach my $edge (@{$edge_ids}) {
100    $edge_attrs{$edge} = int(rand(100));
101}
102
103$done = $client->call(
104    "Cytoscape.addEdgeAttributes",
105    "integer_attribute",
106    "INTEGER",
107    \%edge_attrs
108);
109
110# Set node selection
111print "Setting node selection\n";
112$done = $client->call(
113        "Cytoscape.setSelectedNodes",   # function name
114        \@from                          # nodes to select
115);
116
117# Get a list of the selected nodes
118print "calling getSelectedNodes...";
119my $out = $client->call("Cytoscape.getSelectedNodes");
120print @$out . "\n";
121
122# Perform force-directed Layout
123# Take a look at the possible layouts with: getLayoutNames
124print "Performing layout\n";
125$done = $client->call(
126        'Cytoscape.performLayout',
127        $coder->string("$networkID"),
128        "force-directed"
129);
130
131# Force a redraw of the current network
132$done = $client->call("Cytoscape.redraw");
133
134# copy the 'default' visual style so you can reuse it later.
135print "Copy visual style\n";
136$done = $client->call(
137    "Cytoscape.copyVisualStyle",
138    "default",
139    "default-backup1"
140);
141
142# set the default visual style as the current one again
143$done = $client->call(
144    "Cytoscape.setVisualStyle",
145    "default"
146);
147
148# Set the shapes of the nodes based on another attribute
149print "Setting node shapes\n";
150$done = $client->call(
151        #"Cytoscape.discreteMapper",     # function name
152        #$coder->string("$networkID"),   # identifier of the network
153        "Cytoscape.createDiscreteMapper",
154        "default",                      # name of the vizmap to use
155        "str",                          # name of the attribute to use
156        "Node Shape",                   # name of the vis. param. to change
157        "triangle",                     # default value
158        {                               # hash of nodeid - shape
159            'aa' => 'trapezoid',
160            'bb' => 'trapezoid_2',
161            'cc' => 'rect'
162        }
163);
164
165print "Setting colors\n";
166$done = $client->call(
167    #"Cytoscape.createContinuousNodeVisualStyle",
168    "Cytoscape.createContinuousMapper",
169    $coder->string("default"),
170    $coder->string("nr"),
171    $coder->string("Node Color"),
172    [2.1, 2.51, 7.3, 8.2],
173    ['0F0FFF', '#0FFF0A', '#FF000A', '#0F000A', '#A000F0', '#AAFA0A'],
174);
175
176print "\n";
Note: See TracBrowser for help on using the repository browser.