ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/owl/trunk/iterateUpperNbs.java
Revision: 202
Committed: Thu Jun 21 17:18:11 2007 UTC (17 years, 3 months ago) by duarte
File size: 10295 byte(s)
Log Message:
MySQLConnection now throwing SQLException on connect
Many files changed following this: all calling classes now re-throwing or catching the SQLException
Line User Rev File contents
1 lappe 166 import tools.MySQLConnection;
2    
3     import java.sql.SQLException;
4     import java.sql.Statement;
5     import java.sql.ResultSet;
6    
7 lappe 173 public class iterateUpperNbs {
8 lappe 166
9     /**
10     *
11     * exchange of one neighbor at a time by a common neighbor
12     * @author lappe
13     */
14 lappe 180 static int maxRank = 31; // value to replace for non-existence of central redue in the resultvector (rank=0)
15 lappe 173 // higher values should penalize non-existence more
16 lappe 166 static String user = "lappe" ; // change user name!!
17     static MySQLConnection conn;
18 lappe 170 static double lastEntropy=0.0, lastFreq, lastAUC, lastavgk, lastdevk;
19     static double orgEntropy=0.0, orgFreq, orgAUC, orgavgk, orgdevk;
20     static int lastRank, lastTotal;
21     static int orgRank, orgTotal;
22 lappe 166
23 duarte 202 public static void main(String[] args) throws SQLException {
24 lappe 166
25     if (args.length<2){
26     System.err.println("The graph_id and residue-nr. needs to be given .... i.e. 9 28");
27     System.exit(1);
28     }
29     int graphid = Integer.parseInt( args[0]);
30     int resnr = Integer.parseInt( args[1]);
31 lappe 173 int n1=0, n2=0, ni=0, nj=0, j_num=0, j_shell, j_cnsize, i, j, sumdelta, j_num12=0, j_num21=0;
32     conn = new MySQLConnection("white",user,"nieve","pdb_reps_graph_4_2"); // the UPPERCASE DB!
33     String sql, j_res, j_sec, restype="?", ressec="?", nbs, mymove;
34 lappe 166 Statement stmt, jst;
35 lappe 173 ResultSet rsst;
36 lappe 166
37     try {
38     System.out.println("getting direct neighborhood ... ");
39     stmt = conn.createStatement();
40     stmt.executeUpdate("drop table if exists temp_shell;");
41     stmt.close();
42    
43     stmt = conn.createStatement();
44     stmt.executeUpdate("create table temp_shell as select i_num, i_res, j_num, j_res, j_sstype, 1 as shell from single_model_edge where graph_id="+graphid+" and i_num="+resnr+";");
45     stmt.close();
46    
47     System.out.println("building the 2nd shell");
48     sql = "select j_num, j_res, j_sstype from temp_shell where shell=1;";
49     stmt = conn.createStatement();
50     rsst = stmt.executeQuery(sql);
51     while (rsst.next()) {
52     n1++;
53     j_num = rsst.getInt(1);
54     System.out.println(n1+":"+j_num);
55     jst = conn.createStatement();
56     sql = "insert into temp_shell select i_num, i_res, j_num, j_res, j_sstype, 2 as shell from single_model_edge where graph_id="+graphid+" and i_num="+j_num+";";
57     // System.out.println(">"+sql);
58     jst.executeUpdate( sql);
59     jst.close();
60     } // end while
61     rsst.close();
62     stmt.close();
63    
64 lappe 180 // percolate the environment
65 lappe 173 System.out.println("moving a contact from shell1 -> shell2");
66     sql = "select j_num, j_res, j_sstype, shell from temp_shell where i_num="+resnr+" and shell = 1 order by rand() limit 1;";
67     stmt = conn.createStatement();
68     rsst = stmt.executeQuery(sql);
69     if (rsst.next()) {
70     j_num12 = rsst.getInt( 1);
71     System.out.println(rsst.getInt( 4)+" -> 2 : ("+rsst.getString( 2)+":"+j_num12+":"+rsst.getString( 3)+")");
72     }
73     rsst.close();
74     stmt.close();
75     stmt = conn.createStatement();
76     stmt.executeUpdate("update temp_shell set shell=2 where j_num="+j_num12+";");
77     stmt.close();
78    
79    
80     // and move an indirect nbor from shell2 -> shell 1;
81     System.out.println("moving a contact from shell2 -> shell1");
82     sql = "select j_num, j_res, j_sstype, shell from temp_shell where i_num!="+resnr+" and j_num!="+resnr+" and shell = 2 order by rand() limit 1;";
83     stmt = conn.createStatement();
84     rsst = stmt.executeQuery(sql);
85     if (rsst.next()) {
86     j_num21 = rsst.getInt( 1);
87     System.out.println(rsst.getInt( 4)+" -> 1 : ("+rsst.getString( 2)+":"+j_num21+":"+rsst.getString( 3)+")");
88     }
89     rsst.close();
90     stmt.close();
91     stmt = conn.createStatement();
92     stmt.executeUpdate("update temp_shell set shell=1 where j_num="+j_num21+";");
93     stmt.close();
94    
95 lappe 170 System.out.println("retrieving the entire 1st and 2nd shell");
96 lappe 166 sql = "select j_num, j_res, j_sstype, min(shell) as shell, count(*) as cn from temp_shell group by j_num;";
97     stmt = conn.createStatement();
98     rsst = stmt.executeQuery(sql);
99     // counting shell2
100     n2=0;
101     while (rsst.next()) {
102 lappe 170 if ( rsst.getInt( 4)==2) { // count 2nd shell entry
103     n2++;
104     if ( rsst.getInt( 1)==resnr) { // this is the central node -> get type and secondary structure
105     restype = rsst.getString( 2).toUpperCase();
106     ressec = rsst.getString( 3).toUpperCase();
107     } // end if central residue
108     } // end if 2nds shell
109 lappe 166 System.out.println(n2+":"+rsst.getInt( 1)+"\t"+rsst.getString( 2)+"\t"+rsst.getString( 3)+"\t"+rsst.getInt( 4)+"\t"+rsst.getInt( 5));
110     } // end while
111     System.out.println("SIZE 1st shell "+n1);
112     System.out.println("SIZE 2nd shell "+n2);
113 lappe 170 System.out.println("GraphID "+graphid+" Central residue is "+restype+":"+resnr+":"+ressec);
114 lappe 166
115 lappe 173 for (j=0; j<=n2; j++) { // outer loop through all indirect contacts
116 lappe 170 // System.out.print(i+" - ");
117 lappe 173 sumdelta=0;
118     for (i=0; i<=n1; i++) { // inner loop through all direct contacts
119     mymove = "("+i+","+j+")";
120 lappe 170 ni = 0;
121     nj = 0;
122 lappe 173 nbs="%";
123 lappe 170 rsst.beforeFirst();
124     while (rsst.next()) {
125     j_num = rsst.getInt( 1);
126     j_res = rsst.getString(2);
127     j_sec = rsst.getString(3);
128     j_shell = rsst.getInt( 4);
129     j_cnsize = rsst.getInt( 5);
130    
131     if (j_shell==1) { // a direct 1st shell neighbour
132     ni++;
133     if (ni!=i) {// if this is NOT the one direct nb 2B dropped
134 lappe 173 nbs+=j_res.toUpperCase()+"%";
135 lappe 170 } else { // this one IS dropped
136 lappe 173 mymove += "(-"+j_res+":"+j_num+":"+j_sec+"/"+j_cnsize+")";
137 lappe 170 } // end if ni!=i
138     } else { // 2nd shell neighbour
139     nj++;
140     if (j_num==resnr) { // the central residue is part if the 2nd shell
141     if (nj!=j) { // drop x if marked for inclusion
142 lappe 173 nbs+="x%";
143 lappe 170 } else {
144 lappe 173 mymove += " no x ...";
145 lappe 170 }
146     } else { // this is not x
147     if (nj==j) { // this is the 2nd shell nb 2B included
148 lappe 173 nbs+=j_res.toUpperCase()+"%";
149     mymove += "(+"+j_res+":"+j_num+":"+j_sec+"/"+j_cnsize+")";
150 lappe 170 } // end if
151     } // end if this is central residue x
152     } // end if 1st/2nd shell
153     } // end while through the entire nbhood
154 lappe 166
155 lappe 173 getEntropy( nbs, restype);
156 lappe 170 if (i==0 && j==0) { // original nbhoodstring without any insertions/deletions
157     orgEntropy = lastEntropy;
158     orgFreq = lastFreq;
159     orgAUC = lastAUC;
160     orgavgk = lastavgk;
161     orgdevk = lastdevk;
162     orgRank = lastRank;
163     orgTotal= lastTotal;
164 lappe 173 } // end if 0/0 for defining org*
165     if (lastRank > 0) {
166     sumdelta += (lastRank-orgRank);
167     } else {
168     sumdelta += (maxRank-orgRank);
169     }
170 lappe 166
171 lappe 173 // System.out.println(" t="+orgTotal+" \tentropy = "+String.format("%.5f", orgEntropy)+" \trank#"+String.format("%2d",orgRank)+" \tp("+restype+") = "+String.format("%.5f",orgFreq)+" \t\tAUC = "+String.format("%.5f",orgAUC)+" \t\tavg(k)="+String.format("%.2f",orgavgk)+"\tstddev="+String.format("%.2f",orgdevk));
172     //if ((lastRank>0 && lastRank<orgRank) || (i==0 && j==0)) {
173     System.out.print(mymove+"\t"+nbs);
174     printValues();
175     //}
176    
177    
178 lappe 170 // System.out.println(".");
179 lappe 173 } // close inner loop (i)
180     System.out.println( "Summ "+j+":"+sumdelta);
181     } // next outerloop (j)
182 lappe 166 rsst.close();
183     stmt.close();
184    
185 lappe 170 } catch (SQLException e) {
186     e.printStackTrace();
187     System.err.println("SQLException: " + e.getMessage());
188     System.err.println("SQLState: " + e.getSQLState());
189     } // end try/catch
190     System.out.println("fin.");
191     } // end main
192    
193     public static void printValues() {
194     System.out.print( "\t"+lastTotal+"("+(lastTotal-orgTotal)+")");
195     System.out.print( "\t"+String.format("%.5f", lastEntropy) +" ("+String.format("%.5f", lastEntropy-orgEntropy)+")");
196     System.out.print( "\t#"+String.format("%2d",lastRank) +" ("+String.format("%2d",(lastRank-orgRank))+")");
197     System.out.print( "\t"+String.format("%.5f", lastFreq) +" ("+String.format("%.5f", (lastFreq-orgFreq))+")");
198     System.out.print( "\t"+String.format("%.5f", lastAUC) +" ("+String.format("%.5f", (lastAUC-orgAUC))+")");
199     System.out.print( "\t"+String.format("%.2f", lastavgk) +" ("+String.format("%.2f", (lastavgk-orgavgk))+")");
200     System.out.print( "\t"+String.format("%.2f", lastdevk) +" ("+String.format("%.2f", (lastdevk-orgdevk))+")");
201     System.out.println("");
202     }
203    
204     public static void getEntropy( String nbs, String centRes) {
205     String sql, res;
206     Statement stmt;
207     ResultSet rsst;
208     double p, psum=0.0, logp, plogp, plogpsum=0.0;
209     try {
210     sql = "select count(*) from single_model_node where n like '"+nbs+"';";
211     // System.out.println( sql);
212     stmt = conn.createStatement();
213     rsst = stmt.executeQuery(sql);
214     if (rsst.next()) lastTotal = rsst.getInt( 1);
215     rsst.close();
216     stmt.close();
217 lappe 166
218 lappe 170 sql = "select res, count(*) as t, count(*)/"+lastTotal+" as p, avg( k), stddev( k) from single_model_node where n like '"+nbs+"' group by res order by p DESC;";
219     stmt = conn.createStatement();
220     rsst = stmt.executeQuery(sql);
221     // System.out.println("rank : res : total t : fraction p : log2(p) : -p*log2(p)");
222     int rank = 0;
223     boolean seenCentRes = false;
224     lastAUC = 0.0;
225     lastRank = 0;
226     lastFreq = 0.0;
227     lastavgk = 0.0;
228     lastdevk = 0.0;
229     while (rsst.next()) {
230     rank ++;
231     res = rsst.getString(1); // 1st column -- res
232     p = rsst.getDouble(3); // 3rd: fraction p
233     // System.out.print(rank+ " : " + res+" : "+num+ " : " + p);
234     logp = Math.log(p)/Math.log(2.0); // to basis 2 for info in bits
235     // System.out.print(" : " + logp);
236     plogp = -1.0 * p * logp;
237     // System.out.print(" : " + plogp);
238     plogpsum += plogp;
239     psum += p;
240    
241     if (res.equals(centRes)) {
242     // System.out.print(" <==" + centRes);
243     seenCentRes = true;
244     lastFreq = p;
245     lastRank = rank;
246     lastavgk = rsst.getDouble(4);
247     lastdevk = rsst.getDouble(5);
248     }
249     if (seenCentRes) lastAUC += p;
250     // System.out.println("");
251     }
252     // System.out.println("Sum :"+lastTotal+" : "+psum+" : "+plogpsum);
253     rsst.close();
254     stmt.close();
255     lastEntropy = plogpsum;
256 lappe 173 if (lastRank==0) lastRank = maxRank;
257 lappe 166 } catch (SQLException e) {
258     e.printStackTrace();
259     System.err.println("SQLException: " + e.getMessage());
260     System.err.println("SQLState: " + e.getSQLState());
261 lappe 170 }
262 lappe 166
263 lappe 170 } // end of getEntropy
264 lappe 166
265 lappe 170 } // end class