1 |
import java.sql.*; |
2 |
import java.io.*; |
3 |
import tools.*; |
4 |
|
5 |
/** |
6 |
* Package: tools |
7 |
* Class: testGraph2Pml |
8 |
* Author: Ioannis Filippis, filippis@molgen.mpg.de |
9 |
* Date: 21/03/2006 |
10 |
* |
11 |
* Simple test class for visualizing contact graphs using Graph2Pml class plus |
12 |
* PyMol class. Run PyMol with the -R option to run the server. |
13 |
* |
14 |
* Notes: |
15 |
* - You can find the results from all examples here in |
16 |
* /project/StruPPi/ioannis/workspace/aglappe/vis_examples/ |
17 |
* |
18 |
* Changelog: |
19 |
* 28/03/06 modified by IF (more examples added) |
20 |
* 27/03/06 modified by IF (functional with comments - added cgo examples) |
21 |
* 21/03/06 first created by IF (non functional) |
22 |
*/ |
23 |
|
24 |
public class testGraph2Pml { |
25 |
|
26 |
public static void main(String[] args) { |
27 |
|
28 |
String connFile = "/project/StruPPi/ioannis/cnfs/msdgraph.my.cnf", pdbFileName = "", molObjName = ""; |
29 |
Graph2Pml graphPml = null; |
30 |
PyMol pml = null; |
31 |
|
32 |
mySQLConnect SQLC = new mySQLConnect(); |
33 |
SQLC.readConnectionFile(connFile); |
34 |
Connection conn = SQLC.openConnection(); |
35 |
|
36 |
//Create a new output stream to the pymol server running at the localhost |
37 |
//all commands will be send there |
38 |
PrintWriter serverOutPw = new PrintWriter(new PymolServerOutputStream("http://"+Machine.getClient()+":9123"), true); |
39 |
pml = new PyMol(serverOutPw); |
40 |
|
41 |
pml.openLog("test", "/home/filippis/Desktop"); |
42 |
|
43 |
//Edges as lines |
44 |
//export the pdb file directly from msdsd and load it in pymol |
45 |
pdbFileName = "1rx4_20717_52567"; |
46 |
try { |
47 |
Msdsd2Pdb.export2File("1rx4", 20717, 52567, "/project/StruPPi/ioannis/tmp/"+pdbFileName, "filippis"); |
48 |
} catch (Exception e) { |
49 |
e.printStackTrace(); |
50 |
} |
51 |
molObjName = pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
52 |
System.out.println(molObjName); |
53 |
|
54 |
//create a pymol contact graph object for the graph 33729 |
55 |
//use only SC_SC edges with SC_SC edge weight and nodes that have SC_SC edges |
56 |
//no further filtering in the edges based on the contact range is applied |
57 |
//no user based graph filtering is applied |
58 |
//the graph comes from msdsd |
59 |
//normal edges will be utilised |
60 |
//the graph will not be visualised as "directed" |
61 |
graphPml = new Graph2Pml(serverOutPw, molObjName, 33729, "SC_SC", "SC_SC_in+SC_SC_out", "SC_SC", "true", "true", true, false, false, conn); |
62 |
//draw nodes, edges, special residues but not surface |
63 |
//the node size will be calculated based on the SC_SC_out field on asc order |
64 |
//the node color will be calculated based on the BB_BB_out field not discretised |
65 |
//all ALA nodes will be transparent |
66 |
//all residues that do not have any SC interactions will be the special ones colored green |
67 |
//all edges will be lines of width determined by the SC_SC field in asc order |
68 |
//all edges lines will have color calculated based on the BB_BB_out field not discretised |
69 |
//all edges lines with adjacent ALA's will have gaps |
70 |
graphPml.draw(true, true, true, false); |
71 |
graphPml.setNodeSizeMethod("SC_SC_out", false); |
72 |
graphPml.setNodeColorMethod("BB_BB_out", false); |
73 |
graphPml.setNodeTranspCondition("(res = \"ALA\")"); |
74 |
graphPml.setSpecialRes("green", "SELECT cid, num FROM newmsdgraph.nodes WHERE (graph_id = 33729) AND (sc_sc_in+sc_sc_out = 0);"); |
75 |
graphPml.setEdgeSizeMethod("SC_SC", false); |
76 |
graphPml.setEdgeColorMethod("BB_BB", false); |
77 |
graphPml.setEdgeGapCondition("(i_res = \"ALA\" OR j_res = \"ALA\")"); |
78 |
//create the contact graph |
79 |
graphPml.outputGraph(); |
80 |
//save the image not ray-traced |
81 |
pml.saveImage("test1", "/home/filippis/Desktop", false); |
82 |
//if you want later to read the view from a log file |
83 |
//pml.openLog("test1_log","/home/filippis/Desktop"); |
84 |
//get the view |
85 |
pml.getView("test1_view"); |
86 |
//pml.closeLog(); |
87 |
|
88 |
// delete all and reload the structure |
89 |
pml.delete("all", false); |
90 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
91 |
|
92 |
//to check reversibility in setNodeSizeMethod, setEdgeSizeMethod |
93 |
//and discretised coloring in setNodeColorMethod, setEdgeColorMethod |
94 |
graphPml.setNodeSizeMethod("SC_SC_out", true); |
95 |
graphPml.setNodeColorMethod("BB_BB_out", true); |
96 |
graphPml.setEdgeSizeMethod("SC_SC", true); |
97 |
graphPml.setEdgeColorMethod("BB_BB", true); |
98 |
graphPml.outputGraph(); |
99 |
//set view by reading a log file |
100 |
//pml.getFileView("test2_view", "/home/filippis/Desktop/test1_log.pml"); |
101 |
//pml.setView("test2_view"); |
102 |
//set view based on the view of the first structure so that you can compare |
103 |
//different graphs for the same structure |
104 |
pml.setView("test1_view"); |
105 |
pml.saveImage("test2","/home/filippis/Desktop", false); |
106 |
|
107 |
// delete all and reload the structure |
108 |
pml.delete("all", false); |
109 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
110 |
|
111 |
//just check user defined set/discretised colors |
112 |
//all green nodes must become red |
113 |
graphPml.setNodeColors(new String[] {"red", "magenta", "orange", "chocolate"}); |
114 |
//switched red-green, yellow-blue |
115 |
graphPml.setEdgeColors(new String[] {"red", "green", "yellow", "blue", "violet", "cyan", "salmon", "lime", "pink", "slate", "magenta", "orange", "marine", "olive", "purple", "teal", "forest", "firebrick", "chocolate", "wheat", "white", "grey"}); |
116 |
graphPml.outputGraph(); |
117 |
pml.setView("test1_view"); |
118 |
pml.saveImage("test2a","/home/filippis/Desktop", false); |
119 |
|
120 |
pml.delete("all", false); |
121 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
122 |
|
123 |
//to check node method for edge coloring when nodeColor method not discretised |
124 |
graphPml.setUniformNodeSize(0.6); |
125 |
graphPml.setNodeColorMethod("BB_BB_out", false); |
126 |
graphPml.setUniformEdgeSize(4); |
127 |
graphPml.setEdgeColorMethod("node", true); |
128 |
graphPml.outputGraph(); |
129 |
pml.setView("test1_view"); |
130 |
pml.saveImage("test3","/home/filippis/Desktop", false); |
131 |
|
132 |
pml.delete("all", false); |
133 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
134 |
|
135 |
//to check node method for edge coloring when nodeColor method is discretised |
136 |
graphPml.setUniformNodeSize(0.6); |
137 |
graphPml.setNodeColorMethod("BB_BB_out", true); |
138 |
graphPml.setUniformEdgeSize(4); |
139 |
graphPml.setEdgeColorMethod("node", true); |
140 |
graphPml.outputGraph(); |
141 |
pml.setView("test1_view"); |
142 |
pml.saveImage("test4","/home/filippis/Desktop", false); |
143 |
|
144 |
pml.delete("all", false); |
145 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
146 |
|
147 |
//to check node method for edge coloring when nodeColor method is uniform |
148 |
graphPml.setUniformNodeSize(0.6); |
149 |
graphPml.setUniformNodeColor("blue"); |
150 |
graphPml.setUniformEdgeSize(4); |
151 |
graphPml.setEdgeColorMethod("node", true); |
152 |
graphPml.outputGraph(); |
153 |
pml.setView("test1_view"); |
154 |
pml.saveImage("test5","/home/filippis/Desktop", false); |
155 |
|
156 |
pml.delete("all", false); |
157 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
158 |
|
159 |
//to check the trick of directionality with gapped lines for "half" edges |
160 |
//for this purpose a SC_BB graph model is used that doesn't ensure bidirectionality |
161 |
graphPml = new Graph2Pml(serverOutPw, molObjName, 33729, "SC_BB", "SC_BB_in+SC_BB_out", "SC_BB", "true", "true", true, false, true, conn); |
162 |
graphPml.outputGraph(); |
163 |
pml.setView("test1_view"); |
164 |
pml.saveImage("test6","/home/filippis/Desktop", false); |
165 |
|
166 |
|
167 |
pml.delete("all", false); |
168 |
|
169 |
//test multi-chain macromolecule with RNA also |
170 |
pdbFileName = "1a0a_1107_2560"; |
171 |
try { |
172 |
Msdsd2Pdb.export2File("1a0a", 1107, 2560, "/project/StruPPi/ioannis/tmp/"+pdbFileName, "filippis"); |
173 |
} catch (Exception e) { |
174 |
e.printStackTrace(); |
175 |
} |
176 |
molObjName = pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
177 |
System.out.println(molObjName); |
178 |
|
179 |
graphPml = new Graph2Pml(serverOutPw, molObjName, 95, "SC_SC", "SC_SC_in+SC_SC_out", "SC_SC", "true", "true", true, false, false, conn); |
180 |
graphPml.draw(true, true, false, false); |
181 |
//color nodes based on the chains they belong to |
182 |
graphPml.setChainNodeColor(); |
183 |
graphPml.setNodeTransp(0.2); |
184 |
graphPml.setUniformEdgeColor("red"); |
185 |
graphPml.setUniformEdgeSize(4.5); |
186 |
graphPml.setEdgeGap(0.5); |
187 |
graphPml.outputGraph(); |
188 |
pml.saveImage("test7","/home/filippis/Desktop", false); |
189 |
pml.getView("test2_view"); |
190 |
|
191 |
pml.delete("all", false); |
192 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
193 |
|
194 |
//color edges based on the chains they belong to |
195 |
graphPml.draw(true, true, false, false); |
196 |
graphPml.setUniformNodeColor("red"); |
197 |
graphPml.setChainEdgeColor(); |
198 |
graphPml.outputGraph(); |
199 |
pml.setView("test2_view"); |
200 |
pml.saveImage("test8","/home/filippis/Desktop", false); |
201 |
|
202 |
pml.delete("all", false); |
203 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
204 |
|
205 |
//to check node method for edge coloring when nodeColor method is based on chain coloring |
206 |
//also check the user defined chain colors for nodes |
207 |
graphPml.setChainNodeColor(new String[] {"blue"}); |
208 |
graphPml.setEdgeColorMethod("node", true); |
209 |
graphPml.outputGraph(); |
210 |
pml.setView("test2_view"); |
211 |
pml.saveImage("test9","/home/filippis/Desktop", false); |
212 |
|
213 |
pml.delete("all", false); |
214 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
215 |
|
216 |
//draw also surface - you can not see the graph anymore |
217 |
graphPml.draw(true, true, false, true); |
218 |
graphPml.setSurfTransp(0.7); |
219 |
graphPml.outputGraph(); |
220 |
pml.setView("test2_view"); |
221 |
pml.saveImage("test10","/home/filippis/Desktop", false); |
222 |
|
223 |
try { Thread.sleep(10000); } catch (Exception e) {} |
224 |
|
225 |
//hide the surface, show the RNA also |
226 |
//change the color of the nodes for each chain using the pymol defined list of nodes for each chain |
227 |
pml.hideWhat("surface", "graphMol", false); |
228 |
pml.showWhat("lines", "restMol", false); |
229 |
graphPml.setNodesColorUniform("nodes_cidA","red"); |
230 |
graphPml.setNodesColorUniform("nodes_cidA","yellow"); |
231 |
|
232 |
try { Thread.sleep(10000); } catch (Exception e) {} |
233 |
|
234 |
//if you believe that the objects contained in the list won't exceed the pymol command length limit, |
235 |
//you can concatenate all objects as a single string selection and handle them all together |
236 |
pml.concatList("nodes", "+", "nodesStr"); |
237 |
pml.setNodeColor("blue", "nodesStr", true); |
238 |
pml.selPml("nodes", "nodesStr", true, true); |
239 |
|
240 |
pml.delete("all", false); |
241 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
242 |
|
243 |
//check a graph model with only inter-secondary-structure-elements SC_SC edges |
244 |
//remember that all the nodes with SC_SC will be selected |
245 |
//use default behaviour |
246 |
graphPml = new Graph2Pml(serverOutPw, molObjName, 95, "SC_SC", "SC_SC_in+SC_SC_out", "SC_SC", "(!((i_ssid = j_ssid) AND (i_sstype = j_sstype)))", "true", true, false, false, conn); |
247 |
graphPml.draw(true, true, false, false); |
248 |
graphPml.outputGraph(); |
249 |
pml.setView("test2_view"); |
250 |
pml.saveImage("test11","/home/filippis/Desktop", false); |
251 |
|
252 |
pml.delete("all", false); |
253 |
|
254 |
//CGO EDGES SECTION |
255 |
pdbFileName = "1kj0_21698_55132"; |
256 |
try { |
257 |
Msdsd2Pdb.export2File("1kj0", 21698, 55132, "/project/StruPPi/ioannis/tmp/"+pdbFileName, "filippis"); |
258 |
} catch (Exception e) { |
259 |
e.printStackTrace(); |
260 |
} |
261 |
molObjName = pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
262 |
|
263 |
//Cgo makes sense to be used with directed graph |
264 |
graphPml = new Graph2Pml(serverOutPw, molObjName, 35666, "SC_SC", "SC_SC_in+SC_SC_out", "SC_SC", "true", "true", true, true, true, conn); |
265 |
graphPml.draw(true, true, false, false); |
266 |
graphPml.outputGraph(); |
267 |
pml.saveImage("test12","/home/filippis/Desktop", false); |
268 |
pml.getView("test3_view"); |
269 |
|
270 |
// delete all edges |
271 |
pml.iterateList("edges", "edge"); |
272 |
pml.delete("edge", true); |
273 |
|
274 |
graphPml.draw(false, true, false, false); |
275 |
graphPml.setUniformCgoEdgeSize(0.2); |
276 |
graphPml.setEdgeColorMethod("node", true); |
277 |
graphPml.outputGraph(); |
278 |
pml.setView("test3_view"); |
279 |
pml.saveImage("test13","/home/filippis/Desktop", false); |
280 |
|
281 |
// delete all edges |
282 |
pml.iterateList("edges", "edge"); |
283 |
pml.delete("edge", true); |
284 |
|
285 |
graphPml.setEdgeSizeMethod("SC_SC", false); |
286 |
graphPml.setEdgeColorMethod("BB_BB", false); |
287 |
graphPml.outputGraph(); |
288 |
pml.setView("test3_view"); |
289 |
pml.saveImage("test14","/home/filippis/Desktop", false); |
290 |
|
291 |
pml.iterateList("edges", "edge"); |
292 |
pml.delete("edge", true); |
293 |
|
294 |
graphPml.setEdgeSizeMethod("SC_SC", true); |
295 |
graphPml.setEdgeColorMethod("BB_BB", true); |
296 |
graphPml.outputGraph(); |
297 |
pml.setView("test3_view"); |
298 |
pml.saveImage("test15","/home/filippis/Desktop", false); |
299 |
|
300 |
pml.delete("all", false); |
301 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
302 |
|
303 |
//to check node method for edge coloring when nodeColor method not discretised |
304 |
graphPml.draw(true, true, false, false); |
305 |
graphPml.setUniformNodeSize(0.6); |
306 |
graphPml.setNodeColorMethod("BB_BB_out", false); |
307 |
graphPml.setUniformEdgeSize(0.4); |
308 |
graphPml.setEdgeColorMethod("node", true); |
309 |
graphPml.outputGraph(); |
310 |
pml.setView("test3_view"); |
311 |
pml.saveImage("test16","/home/filippis/Desktop", false); |
312 |
|
313 |
pml.delete("all", false); |
314 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
315 |
|
316 |
//to check node method for edge coloring when nodeColor method not discretised |
317 |
graphPml.setUniformNodeSize(0.6); |
318 |
graphPml.setNodeColorMethod("BB_BB_out", true); |
319 |
graphPml.setUniformEdgeSize(0.4); |
320 |
graphPml.setEdgeColorMethod("node", true); |
321 |
graphPml.outputGraph(); |
322 |
pml.setView("test3_view"); |
323 |
pml.saveImage("test17","/home/filippis/Desktop", false); |
324 |
|
325 |
pml.delete("all", false); |
326 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
327 |
|
328 |
//see "real" half-edges |
329 |
graphPml = new Graph2Pml(serverOutPw, molObjName, 35666, "SC_BB", "SC_BB_in+SC_BB_out", "SC_BB", "true", "true", true, true, true, conn); |
330 |
graphPml.outputGraph(); |
331 |
pml.setView("test3_view"); |
332 |
pml.saveImage("test18","/home/filippis/Desktop", false); |
333 |
|
334 |
pml.delete("all", false); |
335 |
|
336 |
//test multi-chain macromolecule with RNA also |
337 |
pdbFileName = "1a0a_1107_2560.pdb"; |
338 |
molObjName = pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
339 |
System.out.println(molObjName); |
340 |
|
341 |
graphPml = new Graph2Pml(serverOutPw, molObjName, 95, "SC_SC", "SC_SC_in+SC_SC_out", "SC_SC", "true", "true", true, true, true, conn); |
342 |
graphPml.draw(true, true, false, false); |
343 |
graphPml.setNodeColorMethod("SC_SC_out", false); |
344 |
graphPml.setNodeTransp(0); |
345 |
graphPml.setEdgeSizeMethod("SC_SC", false); |
346 |
graphPml.setChainEdgeColor(new String[] {"yellow","red"}); |
347 |
graphPml.outputGraph(); |
348 |
pml.saveImage("test19","/home/filippis/Desktop", false); |
349 |
|
350 |
pml.delete("all", false); |
351 |
|
352 |
pdbFileName = "1rx4_20717_52567.pdb"; |
353 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
354 |
|
355 |
graphPml = new Graph2Pml(serverOutPw, molObjName, 33729, "SC_SC", "SC_SC_in+SC_SC_out", "SC_SC", "true", "true", true, true, true, conn); |
356 |
graphPml.draw(true, true, false, false); |
357 |
graphPml.setNodeSizeMethod("SC_SC_out", false); |
358 |
graphPml.setNodeColorMethod("SC_SC_out", false); |
359 |
graphPml.setNodeTransp(0.6); |
360 |
graphPml.setEdgeSizeMethod("SC_SC", false); |
361 |
graphPml.setEdgeColorMethod("SC_SC", false); |
362 |
graphPml.outputGraph(); |
363 |
pml.saveImage("test20","/home/filippis/Desktop", false); |
364 |
|
365 |
pml.delete("all", false); |
366 |
pdbFileName = "1kj0_21698_55132.pdb"; |
367 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
368 |
|
369 |
//check the setNodeSizeRange method |
370 |
graphPml = new Graph2Pml(serverOutPw, molObjName, 35666, "SC_SC", "SC_SC_in+SC_SC_out", "SC_SC", "true", "true", true, true, true, conn); |
371 |
graphPml.draw(true, false, false, false); |
372 |
graphPml.setChainColors(new String[] {"red"}); |
373 |
graphPml.setNodeSizeMethod("SC_SC_out", false); |
374 |
graphPml.setNodeSizeRange(new double[] {0.6, 1.2}); |
375 |
graphPml.outputGraph(); |
376 |
pml.saveImage("test21","/home/filippis/Desktop", false); |
377 |
|
378 |
pml.delete("all", false); |
379 |
pdbFileName = "1kj0_21698_55132.pdb"; |
380 |
pml.loadPDB(pdbFileName, "/project/StruPPi/ioannis/tmp"); |
381 |
|
382 |
//check the setDefaults method |
383 |
graphPml.setDefaults(new String[] {"nodeSizeRange", "chainColors"}); |
384 |
graphPml.outputGraph(); |
385 |
pml.saveImage("test22","/home/filippis/Desktop", false); |
386 |
|
387 |
pml.closeLog(); |
388 |
|
389 |
SQLC.closeConnection(conn); |
390 |
|
391 |
} |
392 |
|
393 |
} // end of class testGraph2Pml |