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