ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/owl/trunk/cnEvalTargetNbhood.java
Revision: 492
Committed: Wed Jan 2 13:18:57 2008 UTC (16 years, 8 months ago) by duarte
File size: 25088 byte(s)
Log Message:
Copied the aglappe-jung branch into trunk.

Line User Rev File contents
1 lappe 227 import tools.MySQLConnection;
2    
3     import java.sql.SQLException;
4     import java.sql.Statement;
5     import java.sql.ResultSet;
6    
7     public class cnEvalTargetNbhood {
8    
9     /**
10     * CN2 size x sumdelta
11     * iterating over all steps by exchange of one neighbor at a time by a common neighbor
12     * with subsequent scoring
13     * @author lappe
14     */
15     static int maxRank = 21; // value to replace for non-existence of central redue in the resultvector (rank=0)
16     // higher values should penalize non-existence more
17 lappe 231 static int VL=1; // Verbosity Level
18 lappe 227 static String user = "lappe" ; // change user name!!
19     static MySQLConnection conn;
20     static String backgrndDB = "pdb_reps_graph_4_2";
21     static String targetNodes = "target_node";
22     static String targetEdges = "target_edge";
23 lappe 271 static double lastEntropy=0.0, lastFreq, lastAUC, lastavgk, lastdevk, lastCorr;
24 lappe 227 static int lastRank, lastTotal, lastxcn=0;
25     static int graphid=0, resnr=0;
26     static int size1=0, size2=0; // the dimensions of the matrices = |shell1|x|shell2| = nr of direct(1) x indirect(2) nbs
27     static String rsideline[], rheadline[]={" -->\t(-)1st shell\t0"," |\t \t-"," |\t(+) \t0"," V\t2nd shell\t-", " \t \tX"};
28     static String sideline[], headline[]={"\t\t0","\t\t-","\t\t0","\t\t-","\t\tX"};
29     static String restype="?", ressec="?", newnbhood="";
30 lappe 243 static int cn1[], cn2[], matsize[][];
31 lappe 271 static int sumdelta[][], rank[][], total[][], cnall[][];
32     static double cnsize[][], correct[][], entropy[][], freq[][], AUC[][];
33 lappe 227 static String newnbs[][], nbstring[][], moveset[][];
34    
35     static int printRank=1,
36     printTotal = 2,
37     printEntropy = 3,
38     printFreq = 4,
39     printAUC = 5,
40     printNbstring= 6,
41     printMoveset = 7,
42     printdeltaRank=8,
43     printCNSize =9,
44 lappe 243 printCNSxdelta=10,
45     printMatSize =11,
46 lappe 271 printCNSdMSxdelta=12,
47     printCorrect = 13,
48     printCordMSxdelta=14;
49 lappe 227
50     public static void main(String[] args) {
51    
52     if (args.length<2){
53     System.err.println("The graph_id and residue-nr. needs to be given .... i.e. 7 110");
54     System.exit(1);
55     }
56     graphid = Integer.parseInt( args[0]);
57     resnr = Integer.parseInt( args[1]);
58     int j_num=0, oj_num=0, oj_shell, oj_cnsize, i, j, x, oi, oj, o1, o2, ixnum, jxnum, score=0;
59     boolean overx = false;
60     String sql, oj_res, oj_sec;
61     Statement mstmt, mjst, nstmt;
62     ResultSet mrsst, nrsst;
63    
64     try {
65     conn = new MySQLConnection("white",user,"nieve", backgrndDB); // the UPPERCASE DB!
66     System.out.println("Scoring Target neighborhoods v.0.4. ");
67    
68     sql = "select num, res, sstype from "+targetNodes+" where graph_id="+graphid+" and num="+resnr+";";
69     mstmt = conn.createStatement();
70     mrsst = mstmt.executeQuery(sql);
71     if (mrsst.next()) {
72     // this is the central node -> get type and secondary structure
73     restype = mrsst.getString( 2).toUpperCase();
74     ressec = mrsst.getString( 3).toUpperCase();
75     } // end if central residue
76     mrsst.close();
77     mstmt.close();
78     System.out.println("GraphID "+graphid+" Central residue is "+restype+":"+resnr+":"+ressec);
79    
80     // retrieve the original nbhood into orig_shell
81     System.out.println("retrieving original first shell ... ");
82     mstmt = conn.createStatement();
83     mstmt.executeUpdate("drop table if exists orig_shell;");
84     mstmt.close();
85    
86     mstmt = conn.createStatement();
87     mstmt.executeUpdate("create table orig_shell as select i_num, i_res, j_num, j_res, j_sstype, 1 as shell from "+targetEdges+" where graph_id="+graphid+" and i_num="+resnr+";");
88     mstmt.close();
89    
90     System.out.println("adding the original 2nd shell ...");
91     sql = "select j_num from orig_shell where shell=1;";
92     mstmt = conn.createStatement();
93     mrsst = mstmt.executeQuery(sql);
94     i=0;
95     while (mrsst.next()) {
96     i++;
97     oj_num = mrsst.getInt(1);
98     System.out.println(i+":"+oj_num);
99     mjst = conn.createStatement();
100     sql = "insert into orig_shell select i_num, i_res, j_num, j_res, j_sstype, 2 as shell from "+targetEdges+" where graph_id="+graphid+" and i_num="+oj_num+";";
101     // System.out.println(">"+sql);
102     mjst.executeUpdate( sql);
103     mjst.close();
104     } // end while
105     mrsst.close();
106     mstmt.close();
107    
108     System.out.println("gathering the original 1st and 2nd shell nbs.");
109     sql = "select j_num, j_res, j_sstype, min(shell) as shell, count(*) as cn from orig_shell where j_num!="+resnr+" group by j_num order by j_num;";
110     mstmt = conn.createStatement();
111     mrsst = mstmt.executeQuery(sql);
112     o1=0;
113     o2=0;
114     while (mrsst.next()) {
115     if ( mrsst.getInt( 4)==1) { // count 1st shell entry
116     o1++;
117     System.out.print("1#"+o1);
118     rheadline[0]+="\t"+o1;
119     rheadline[1]+="\t"+mrsst.getString(2); // res
120     rheadline[2]+="\t"+mrsst.getInt(1); // resnum
121     rheadline[3]+="\t"+mrsst.getString(3); // SStype
122     rheadline[4]+="\t("+mrsst.getInt(5)+")"; // CN
123     } // end if 2st shell
124     if ( mrsst.getInt( 4)==2) { // count 2nd shell entry
125     o2++;
126     System.out.print("2#"+o2);
127     } // end if 2nd shell
128     System.out.println(" :\t"+mrsst.getInt( 1)+"\t"+mrsst.getString( 2)+"\t"+mrsst.getString( 3)+"\t"+mrsst.getInt( 4)+"\t"+mrsst.getInt( 5));
129     } // end while
130     System.out.println("Orig.SIZE 1st shell "+o1);
131     System.out.println("Orig.SIZE 2nd shell "+o2);
132     rheadline[4] = rheadline[4].replace("X", ("("+o1)+")");
133     rsideline = new String[o2+1];
134     rsideline[0]="+0\tRnum:S(cn)";
135     sumdelta = new int[(o1+1)][(o2+1)];
136     newnbs = new String[(o1+1)][(o2+1)];
137     cnall = new int[(o1+1)][(o2+1)];
138 lappe 243 matsize = new int[(o1+1)][(o2+1)];
139 lappe 271 correct = new double[(o1+1)][(o2+1)];
140 lappe 227 // creating the perturbed version of shell 1 into temp_shell
141     for (j=0; j<=o2; j++) { // <=o2 outer loop through all originally indirect contacts
142    
143     for (i=0; i<=o1; i++) { // inner loop through all originally direct contacts
144     if (VL>=1) {
145     System.out.println("---------------------------------------------");
146     System.out.println("Creating perturbed nbhood ("+i+","+j+")\t");
147     }
148     // clear first
149     nstmt = conn.createStatement();
150     nstmt.executeUpdate("drop table if exists temp_shell;");
151     nstmt.close();
152     nstmt = conn.createStatement();
153     nstmt.executeUpdate("create table temp_shell select * from orig_shell limit 0;");
154     nstmt.close();
155     oi = 0;
156     oj = 0;
157     mrsst.beforeFirst();
158     newnbhood="";
159     overx = false;
160     ixnum=0;
161     jxnum=0;
162     while (mrsst.next()) {
163     oj_num = mrsst.getInt( 1);
164     oj_res = mrsst.getString(2);
165     oj_sec = mrsst.getString(3);
166     oj_shell = mrsst.getInt( 4);
167     oj_cnsize = mrsst.getInt( 5);
168     if (oj_num>resnr) { // we are over x
169     if (!overx) {
170     newnbhood+="x";
171     overx=true;
172     } // end if over x
173     } // END IF J > X
174     if (oj_shell==1) { // a direct 1st shell neighbour
175     oi++;
176     if (oi!=i) {// if this is NOT the one direct nb 2B dropped
177     // include as 1st shell nbor into temp_shell
178     nstmt = conn.createStatement();
179     sql = "insert into temp_shell values("+resnr+",\'"+restype+"\',"+oj_num+",\'"+oj_res+"\',\'"+oj_sec+"\', 1);";
180     // System.out.println("oi>"+ sql);
181     nstmt.executeUpdate(sql);
182     nstmt.close();
183     newnbhood+=oj_res;
184     } else {
185     ixnum=oj_num;
186     } // end if ni!=i
187     } else { // 2nd shell neighbour
188     oj++;
189     if (oj==j) { // this is the 2nd shell nb 2B included
190     // put as new 1st shell nbor
191     nstmt = conn.createStatement();
192     sql = "insert into temp_shell values("+resnr+",\'"+restype+"\',"+oj_num+",\'"+oj_res+"\',\'"+oj_sec+"\', 1);";
193     // System.out.println("oj>"+ sql);
194     nstmt.executeUpdate(sql);
195     nstmt.close();
196     newnbhood+=oj_res;
197     jxnum=oj_num;
198     } // end if
199     if (j==0) { // creating the sideline ruler array for the output
200     rsideline[oj] = "+"+oj+"\t"+oj_res+""+oj_num+":"+oj_sec+"("+oj_cnsize+")";
201     } // end if j==0
202     } // end if 1st/2nd shell
203    
204     } // end while through the entire nbhood
205     if (!overx) { // we haven't seen a nb > x yet
206     newnbhood+="x"; // x sits at the end of the nbhoodstring
207     overx=true;
208     } // end if over x
209     // System.out.println("new direct nbhood "+newnbhood);
210     // Now the "updated" / perturbed version of shell 1 is in temp_shell
211     // we can build 2nd shell accordingly.
212     // System.out.println("building the 2nd shell");
213     sql = "select j_num, j_res, j_sstype from temp_shell where shell=1;";
214     nstmt = conn.createStatement();
215     nrsst = nstmt.executeQuery(sql);
216     x = 0;
217     while (nrsst.next()) {
218     x++;
219     j_num = nrsst.getInt( 1);
220     // System.out.println(x+":"+nrsst.getString( 2)+" "+j_num+" "+nrsst.getString( 3));
221     mjst = conn.createStatement();
222     sql = "insert into temp_shell select i_num, i_res, j_num, j_res, j_sstype, 2 as shell from "+targetEdges+" where graph_id="+graphid+" and i_num="+j_num+";";
223     // System.out.println(">"+sql);
224     mjst.executeUpdate( sql);
225     mjst.close();
226     } // end while
227     nrsst.close();
228     nstmt.close();
229     // and score this move
230     lastxcn=0;
231     newnbs[i][j]= newnbhood;
232 lappe 231 System.out.print("\n["+i+"]["+j+"]\t-"+ixnum+"/+"+jxnum+"\t"+newnbs[i][j]+"\t ");
233 lappe 227 score = scoreCurrentNbhood( ixnum, jxnum);
234     sumdelta[i][j] = score;
235     cnall[i][j] = lastxcn;
236 lappe 243 matsize[i][j] = (size1*size2)-1;
237 lappe 271 correct[i][j] = lastCorr;
238 lappe 227 if (VL>=1) {
239 lappe 243 reportMatrix( printRank );
240 lappe 231 reportMatrix( printdeltaRank );
241 lappe 271 reportMatrix( printCNSize );
242     reportMatrix( printCNSxdelta);
243 lappe 227 System.out.println("SumDeltaRank Score = \t"+score);
244 lappe 271 System.out.println("corrected Score = \t"+correct[i][j]);
245 lappe 243 System.out.println("Matrix size n1*n2-1= \t("+size1+"*"+size2+")-1 ="+matsize[i][j]);
246 lappe 227 System.out.println("CN1 x CN2 product = \t"+cnall[i][j]);
247     } else {
248 lappe 231 System.out.print("\t"+score+"*"+cnall[i][j]+"\t= "+(score*cnall[i][j]));
249 lappe 227 }
250     // reportMatrix( printNbstring );
251     } // next i
252     System.out.println("\t");
253     } // next j
254     // report total matrix sumdelta
255 lappe 231 // if (VL>=1) {
256 lappe 227 System.out.println("GraphID "+graphid+" Central residue is "+restype+":"+resnr+":"+ressec);
257     System.out.println("backgroundDB"+backgrndDB+" \t maxRank : "+maxRank);
258     reportResults( o1, o2, printRank);
259     reportResults( o1, o2, printCNSize);
260 lappe 243 reportResults( o1, o2, printMatSize);
261 lappe 231 //}
262 lappe 243 reportResults( o1, o2, printCNSxdelta );
263     reportResults( o1, o2, printCNSdMSxdelta );
264 lappe 271 reportResults( o1, o2, printCorrect);
265     reportResults( o1, o2, printCordMSxdelta);
266 lappe 227 // Cleanup ...
267     mrsst.close();
268     mstmt.close();
269    
270     } catch (SQLException e) {
271     e.printStackTrace();
272     System.err.println("SQLException: " + e.getMessage());
273     System.err.println("SQLState: " + e.getSQLState());
274     } // end try/catch
275     System.out.println("fin.");
276     } // end main
277    
278    
279    
280     public static void reportResults( int o1, int o2, int what2print) {
281     System.out.println("Printing "+what2print);
282     if (what2print==printRank) System.out.println("Overall resulting SumDeltaRank Matrix" );
283     if (what2print==printNbstring) System.out.println("Overall tested new nbhoodStrings" );
284     if (what2print==printCNSize) System.out.println("Overall cnsize" );
285     if (what2print==printCNSxdelta) System.out.println("Overall (cnsize*sumDeltaRank)" );
286     /*if (what2print==printTotal) System.out.print("total[i][j]" );
287     if (what2print==printEntropy) System.out.print("entropy[i][j]" );
288     if (what2print==printFreq ) System.out.print("freq[i][j]" );
289     if (what2print==printAUC) System.out.print("AUC[i][j]" );
290    
291     if (what2print==printMoveset) System.out.print("moveset[i][j]" );
292     if (what2print==printdeltaRank) System.out.print("rank[i][j]-rank[0][0]" );) */
293    
294     // print headerline(s)
295     System.out.println(rheadline[0]);
296     System.out.println(rheadline[1]);
297     System.out.println(rheadline[2]);
298     System.out.println(rheadline[3]);
299     System.out.println(rheadline[4]);
300     for (int j=0; j<=o2; j++) {
301     // print rsideline
302     System.out.print( rsideline[j]+"\t");
303     for ( int i=0; i<=o1; i++) {
304     if (what2print==printRank) System.out.print( sumdelta[i][j] );
305     if (what2print==printNbstring) System.out.print( newnbs[i][j] );
306     if (what2print==printCNSize) System.out.print( cnall[i][j] );
307 lappe 243 if (what2print==printCNSxdelta) System.out.print( sumdelta[i][j]*cnall[i][j] );
308     if (what2print==printMatSize) System.out.print( matsize[i][j] );
309     if (what2print==printCNSdMSxdelta) System.out.print( sumdelta[i][j]*cnall[i][j]/matsize[i][j] );
310 lappe 271 if (what2print==printCorrect) System.out.print( correct[i][j] );
311     if (what2print==printCordMSxdelta) System.out.print( correct[i][j]*cnall[i][j]/matsize[i][j] );
312 lappe 227 System.out.print("\t");
313     } // next i
314     System.out.println("");
315     } // next j
316     } // end of reportResults
317    
318    
319    
320     public static int scoreCurrentNbhood( int ixnum, int jxnum) {
321     int ixcn=0, jxcn=0, n1=0, n2=0, ni, nj, i, j, j_num, j_shell, j_cnsize, sumdeltarank=0;
322     String sql, j_res, j_sec, nbs, mymove, precol;
323 lappe 271 boolean overx = false;
324     lastCorr = 0.0;
325 lappe 227 Statement stmt;
326     ResultSet rsst;
327 lappe 271
328 lappe 227 try {
329     headline[0]="\t\t\t0";
330     headline[1]="\t\t\t-";
331     headline[2]="\t\t\t0";
332     headline[3]="\t\t\t-";
333     headline[4]="\t\t\tX";
334    
335     // System.out.println("retrieving the entire nbhood (1st and 2nd shell)");
336     sql = "select j_num, j_res, j_sstype, min(shell) as shell, count(*) as cn from temp_shell where j_num!="+resnr+" group by j_num order by j_num;";
337     stmt = conn.createStatement();
338     rsst = stmt.executeQuery(sql);
339     // counting shell2
340     n2=0;
341     while (rsst.next()) {
342     if ( rsst.getInt( 4)==1) { // count 1st shell entry
343     n1++;
344     // System.out.print("1#"+n1);
345     headline[0]+="\t"+n1;
346     headline[1]+="\t"+rsst.getString(2); // res
347     headline[2]+="\t"+rsst.getInt(1); // resnum
348     headline[3]+="\t"+rsst.getString(3); // SStype
349 lappe 271 headline[4]+="\t("+((rsst.getInt(5))-1)+")"; // CNSize
350 lappe 227 } // end if 2st shell
351     if ( rsst.getInt( 4)==2) { // count 2nd shell entry
352     n2++;
353     // System.out.print("2#"+n2);
354     } // end if 2nd shell
355     // System.out.println(" :\t"+rsst.getInt( 1)+"\t"+rsst.getString( 2)+"\t"+rsst.getString( 3)+"\t"+rsst.getInt( 4)+"\t"+rsst.getInt( 5));
356     } // end while
357     size1 = n1;
358     size2 = n2;
359     ixcn = n1;
360     jxcn = n1;
361     if (VL>=1) {
362     System.out.println("|1st shell|="+size1+" \tx\t |2nd shell|="+size2);
363     }
364     headline[4]=headline[4].replace("X",("("+size1+")"));
365    
366     // n1 and n2 are known, initialise matrices accordingly.
367     // nbhood, move, rank, entropy, freq, AUC etc. (evtl.+ degree(?))
368     rank = new int[(n1+1)][(n2+1)];
369     rank[0][0]=maxRank;
370     total = new int[(n1+1)][(n2+1)];
371     entropy = new double[(n1+1)][(n2+1)];
372     freq = new double[(n1+1)][(n2+1)];
373     AUC = new double[(n1+1)][(n2+1)];
374     nbstring = new String[(n1+1)][(n2+1)];
375     moveset = new String[(n1+1)][(n2+1)];
376     sideline = new String[n2+1];
377     cn1 = new int[n1+1];
378     cn2 = new int[n2+1];
379 lappe 271 cnsize = new double[(n1+1)][(n2+1)];
380 lappe 227
381     for (j=0; j<=n2; j++) { // outer loop through all indirect contacts
382     for (i=0; i<=n1; i++) { // inner loop through all direct contacts
383     mymove = "";
384     overx = false;
385     if (VL>=1) {
386     System.out.print("("+i+","+j+")\t");
387     }
388     ni = 0;
389     nj = 0;
390     sideline[0]="+0\tRnum:S("+n1+")";
391     cn1[0]=n1;
392     cn2[0]=n1;
393     nbs="%";
394     rsst.beforeFirst();
395     while (rsst.next()) {
396     j_num = rsst.getInt(1);
397     j_res = rsst.getString(2);
398     j_sec = rsst.getString(3);
399     j_shell = rsst.getInt(4);
400     j_cnsize = rsst.getInt(5);
401 lappe 271
402     // if edge exists between the dropped direct and the new (ind.)nbour then cnsize of dropped+1
403    
404 lappe 227 if (j_num>resnr) { // we are over x
405     if (!overx) {
406     nbs+="x%";
407     overx=true;
408     } // end if over x
409     } // END IF J > X
410     if (j_shell==1) { // a direct 1st shell neighbour
411     ni++;
412     if (ni!=i) {// if this is NOT the one direct nb 2B dropped
413     nbs+=j_res.toUpperCase()+"%"; // it is included
414     if ( j_num==jxnum && j==0) { // This is the direct nb dropped
415 lappe 271 jxcn=j_cnsize;
416 lappe 231 if (VL>=2) System.out.print("(j"+jxnum+":"+jxcn+")");
417 lappe 227 }
418     } else { // this one IS dropped
419     mymove += "(-"+j_res+":"+j_num+":"+j_sec+"/"+j_cnsize+")";
420     cn1[ni]=j_cnsize;
421     } // end if ni!=i
422    
423     } else { // 2nd shell neighbour
424     nj++;
425     if (nj==j) { // this is the 2nd shell nb 2B included
426     nbs+=j_res.toUpperCase()+"%";
427     mymove += "(+"+j_res+":"+j_num+":"+j_sec+"/"+j_cnsize+")";
428     if ( j_num==ixnum && i==0) { // This is the dropped direct nb, no 2b found in 2ns shell
429     ixcn=j_cnsize;
430 lappe 231 if (VL>=2) System.out.print("(i"+ixnum+":"+ixcn+")");
431 lappe 227 }
432 lappe 271 cn2[nj] = j_cnsize;
433 lappe 227 } // end if
434    
435     // // only once for building the sidelines
436     if (j==0) {
437     sideline[nj] = "+"+nj+"\t"+j_res+""+j_num+":"+j_sec+"("+j_cnsize+")";
438 lappe 271 // was here: cn2[nj] = j_cnsize;
439 lappe 227 } // end if sideline
440     } // end if 1st/2nd shell
441    
442     } // end while through the entire nbhood
443 lappe 271
444 lappe 227 if (!overx) { // in case x is the very last we haven't seen it yet
445     nbs+="x%"; // add it in the end
446     overx=true;
447     } // end if over x
448     if (VL>=1) {
449     System.out.print("("+nbs+")\t");
450     }
451     nbstring[i][j] = nbs;
452     moveset[i][j] = mymove;
453 lappe 271 if (VL>=2) System.out.print(" "+mymove);
454 lappe 227 precol = nbstring[i][0];
455     getEntropy( nbs, restype, precol);
456     if (lastRank==0) lastRank = maxRank;
457     rank[i][j] = lastRank;
458     entropy[i][j] = lastEntropy;
459     freq[i][j] = lastFreq;
460     AUC[i][j] = lastAUC;
461     total[i][j]= lastTotal;
462 lappe 271 /*if ( edgeExists( u, v)) {
463     cnsize[i][j]=(double) ((double)cn2[j]-1)/((double)cn1[i]+1);
464     if (VL>=1) System.out.print("+-"+cn2[j]+"/"+cn1[i]+"="+String.format("%.3f",cnsize[i][j])+"\t");
465     } else { */
466     cnsize[i][j]=(double) ((double)cn2[j])/((double)cn1[i]);
467     if (VL>=2) System.out.print("= "+cn2[j]+"/"+cn1[i]+"="+String.format("%.3f",cnsize[i][j])+"\t");
468     // }
469    
470 lappe 227 if (lastRank > 0) {
471     sumdeltarank += ( (lastRank-rank[0][0]) );
472 lappe 271 lastCorr += ( (lastRank-rank[0][0])*cnsize[i][j] );
473 lappe 227 } else {
474     sumdeltarank += ( (maxRank-rank[0][0]) );
475 lappe 271 lastCorr += ( (maxRank-rank[0][0])*cnsize[i][j] );
476 lappe 227 } // end if lastRank was defined
477 lappe 271
478     if (VL>=2) System.out.print(""+lastRank+"\t");
479 lappe 227 } // close inner loop (i)
480     if (VL>=1) {
481     System.out.println(".");
482     } else {
483     System.out.print(".");
484     }
485     } // next outerloop (j)
486     lastxcn=(ixcn*jxcn);
487     if (VL>=1) {
488     System.out.println("lastxcn=(ixcn*jxcn)=("+ixcn+"*"+jxcn+")="+lastxcn);
489     }
490     rsst.close();
491     stmt.close();
492    
493     } catch (SQLException e) {
494     e.printStackTrace();
495     System.err.println("SQLException: " + e.getMessage());
496     System.err.println("SQLState: " + e.getSQLState());
497     } // end try/catch
498     // System.out.println("fin.");
499     return sumdeltarank;
500     } // end scoreCurrentNbhood
501    
502 lappe 271 public static boolean edgeExists( int u_num, int v_num) {
503     int c=0;
504     String sql;
505     boolean found = false;
506     Statement st;
507     ResultSet rs;
508     try {
509     sql = "select count(*) from temp_shell where i_num="+u_num+" and j_num="+v_num+";";
510     st = conn.createStatement();
511     rs = st.executeQuery(sql);
512     if (rs.next()) c = rs.getInt(1);
513     found = (c>0);
514     rs.close();
515     st.close();
516     } catch (SQLException e) {
517     e.printStackTrace();
518     System.err.println("SQLException: " + e.getMessage());
519     System.err.println("SQLState: " + e.getSQLState());
520     } // end try/catch
521     return found;
522     } // end edgeExists( u_num, v_num)
523 lappe 227
524     public static void reportMatrix( int what2print) {
525     System.out.println("\nPrinting "+what2print);
526     if (what2print==printRank) System.out.print("rank[i][j]" );
527     if (what2print==printTotal) System.out.print("total[i][j]" );
528     if (what2print==printEntropy) System.out.print("entropy[i][j]" );
529     if (what2print==printFreq ) System.out.print("freq[i][j]" );
530     if (what2print==printAUC) System.out.print("AUC[i][j]" );
531     if (what2print==printNbstring) System.out.print("nbstring[i][j]" );
532     if (what2print==printMoveset) System.out.print("moveset[i][j]" );
533     if (what2print==printdeltaRank) System.out.print("rank[i][j]-rank[0][0]" );
534     if (what2print==printCNSize) System.out.print("cnsize[i][j]" );
535     if (what2print==printCNSxdelta) System.out.print("cnsize[i][j]*(rank[i][j]-rank[0][0])" );
536    
537     System.out.println("...");
538     // print headerline(s)
539     System.out.println(headline[0]);
540     System.out.println(headline[1]);
541     System.out.println(headline[2]);
542     System.out.println(headline[3]);
543     System.out.println(headline[4]);
544     for (int j=0; j<=size2; j++) {
545     // print sideline
546     System.out.print( sideline[j]+"\t");
547     for ( int i=0; i<=size1; i++) {
548     if (what2print==printRank) System.out.print( rank[i][j] );
549     if (what2print==printTotal) System.out.print( total[i][j] );
550     if (what2print==printEntropy) System.out.print( entropy[i][j] );
551     if (what2print==printFreq ) System.out.print( freq[i][j] );
552     if (what2print==printAUC) System.out.print( AUC[i][j] );
553     if (what2print==printNbstring) System.out.print( nbstring[i][j] );
554     if (what2print==printMoveset) System.out.print( moveset[i][j] );
555     if (what2print==printdeltaRank) System.out.print( rank[i][j]-rank[0][0] );
556 lappe 271 if (what2print==printCNSize) System.out.print( String.format("%.3f",cnsize[i][j]) );
557     if (what2print==printCNSxdelta) System.out.print( String.format("%.3f", (cnsize[i][j]*(rank[i][j]-rank[0][0]))) );
558 lappe 227 System.out.print("\t");
559     } // next i
560     System.out.println("");
561     } // next j
562     } // end of report
563    
564     public static void getEntropy( String nbs, String centRes, String predec) {
565     String sql, res, this_n, prec_n;
566     Statement stmt;
567     ResultSet rsst;
568 lappe 243 double p, psum=0.0, logp, plogp, plogpsum=0.0;
569     int counter=0, c=0, lastc=0;
570 lappe 227 try {
571     // Hashing first row tables comes first
572     // System.out.println("nbs : "+nbs);
573     // System.out.println("predec: "+predec);
574     this_n = nbs.replace("%","");
575     prec_n = predec.replace("%","");
576     // System.out.println("this_n: ["+this_n+"]");
577     // System.out.println("prec_n: ["+prec_n+"]");
578     if (prec_n.equals(this_n)) {
579     // System.out.println("have to create db for this "+prec_n);
580     sql = "create table IF NOT EXISTS nbhashtables."+prec_n+" as select res, n, k from single_model_node where n like '"+nbs+"';";
581     // System.out.println(" >> "+sql);
582     stmt = conn.createStatement();
583     stmt.executeUpdate( sql);
584     stmt.close();
585     } // else System.out.println("using preceding db of "+prec_n);
586    
587     // now we can safely derive the estimates from the hashtable
588     sql = "select count(*) from nbhashtables."+prec_n+" where n like '"+nbs+"';";
589     // System.out.println( sql);
590     stmt = conn.createStatement();
591     rsst = stmt.executeQuery(sql);
592     if (rsst.next()) lastTotal = rsst.getInt( 1);
593     rsst.close();
594     stmt.close();
595    
596     sql = "select res, count(*) as t, count(*)/"+lastTotal+" as p, avg( k), stddev( k) from nbhashtables."+prec_n+" where n like '"+nbs+"' group by res order by p DESC;";
597     stmt = conn.createStatement();
598     rsst = stmt.executeQuery(sql);
599     // System.out.println("rank : res : total t : fraction p : log2(p) : -p*log2(p)");
600     int rank = 0;
601     boolean seenCentRes = false;
602     lastAUC = 0.0;
603     lastRank = 0;
604     lastFreq = 0.0;
605     lastavgk = 0.0;
606     lastdevk = 0.0;
607     while (rsst.next()) {
608 lappe 243 counter++;
609 lappe 227 res = rsst.getString(1); // 1st column -- res
610 lappe 243 c = rsst.getInt( 2); // 2nds column : count/residue
611 lappe 227 p = rsst.getDouble(3); // 3rd: fraction p
612 lappe 243 if (VL>=2) System.out.print(counter+"/"+rank+ " : " + res+" : "+c+ " : " + p);
613 lappe 227 logp = Math.log(p)/Math.log(2.0); // to basis 2 for info in bits
614     // System.out.print(" : " + logp);
615     plogp = -1.0 * p * logp;
616     // System.out.print(" : " + plogp);
617     plogpsum += plogp;
618     psum += p;
619    
620 lappe 243 if ((c == lastc) && (lastc>0)) { // tie
621     if (VL>=2) System.out.print(" <-- TIE!");
622     lastRank = counter;
623     } // end if
624    
625 lappe 227 if (res.equals(centRes)) {
626 lappe 243 if (VL>=2) System.out.print(" <== " + centRes);
627 lappe 227 seenCentRes = true;
628     lastFreq = p;
629     lastRank = rank;
630     lastavgk = rsst.getDouble(4);
631     lastdevk = rsst.getDouble(5);
632 lappe 243 lastc = c;
633 lappe 227 }
634 lappe 243 if (seenCentRes) lastAUC += p;
635    
636     if (VL>=2) System.out.println("");
637 lappe 227 }
638     // System.out.println("Sum :"+lastTotal+" : "+psum+" : "+plogpsum);
639 lappe 243 if (VL>=2) System.out.println("=> rank "+lastRank);
640 lappe 227 rsst.close();
641     stmt.close();
642     lastEntropy = plogpsum;
643     if (lastRank==0) lastRank = maxRank;
644     } catch (SQLException e) {
645     e.printStackTrace();
646     System.err.println("SQLException: " + e.getMessage());
647     System.err.println("SQLState: " + e.getSQLState());
648     }
649    
650     } // end of getEntropy
651    
652     } // end class