00001 package SummaryReader;
00002
00003 public class DataBlock implements regExpressions, DisplayGUI.TestDataInfo {
00004
00005 Double[][] data = new Double[12][];
00006 String title;
00007 String[] headers;
00008 Double[][] means = new Double[4][];
00009 int arraySize;
00010 int testType;
00011
00012 java.text.DecimalFormat nf = new java.text.DecimalFormat("#.##");
00013 java.text.DecimalFormat nfe = new java.text.DecimalFormat("#.##E0");
00014
00015 public DataBlock(String title, int arraySize, int testType) {
00016 this.title=title;
00017 this.testType=testType;
00018 this.arraySize=arraySize;
00019 for(int i=0;i<12;i++) data[i] = new Double[arraySize];
00020 for(int i=0;i<4;i++) means[i] = new Double[arraySize];
00021 headers = new String[arraySize];
00022 }
00023 public void add(int chip, int column, String dataString) {
00024 if(dataString.equals("nan")) dataString="-1.";
00025 try {
00026 data[chip][column]=Double.valueOf(dataString);
00027 }catch(Exception parseException){
00028 dataString = dataString.toLowerCase();
00029 if(dataString.equals("not tested")) data[chip][column] = new Double(0.);
00030 else if(dataString.equals("minimal tested")) data[chip][column] = new Double(1.);
00031 else {
00032 data[chip][column]=null;
00033 System.err.println("Failed to parse datas for chip,parameter: "+chip+","+column+" : "+dataString);
00034 }
00035 }
00036 }
00037 public void add(int chip, int column, double theData) {
00038 try {
00039 data[chip][column]=new Double(theData);
00040 }catch(Exception parseException){data[chip][column]=null; System.err.println("Failed to parse datas for chip,parameter: "+chip+","+column+" : "+theData);}
00041 }
00042
00043 public void add(int param, String header) {
00044 headers[param]=header;
00045 }
00046 public String getTitle() {
00047 return title;
00048 }
00049 public void calculateMeans() {
00050 double refValue;
00051 for(int column=0;column<arraySize;column++) {
00052 double maxValue=-99999.;
00053 double minValue=99999.;
00054 double mean0=0.;
00055 double mean1=0.;
00056 for(int i=0;i<12;i++) {
00057 if(data[i][column]==null) {
00058 System.err.println("Null data for chip,column "+i+","+column+" for "+title);
00059 continue;
00060 }
00061 double thisValue = data[i][column].doubleValue();
00062
00063 if(i<6) mean0+=thisValue;
00064 else mean1+=thisValue;
00065 if(thisValue>maxValue) maxValue=thisValue;
00066 if(thisValue<minValue) minValue=thisValue;
00067 }
00068 means[0][column] = new Double(maxValue);
00069 means[1][column] = new Double(minValue);
00070 double d = mean0/6.;
00071 if(d<0.001) means[2][column] = Double.valueOf(nfe.format(d));
00072 else means[2][column] = Double.valueOf(nf.format(d));
00073 d=mean1/6.;
00074 if(d<0.001) means[3][column] = Double.valueOf(nfe.format(d));
00075 else means[3][column] = Double.valueOf(nf.format(d));
00076 }
00077 }
00078
00079 public Double get(int chip, int column) {
00080 if(chip<4) {
00081 double value = means[chip][column].doubleValue();
00082 if(value==0. && !canBeZero[testType][column+3]) return null;
00083 if(value==-99999. || value==99999.) return null;
00084 return means[chip][column];
00085 }
00086 if(data[chip-4][column]==null) return null;
00087 if(data[chip-4][column].doubleValue()==0. && !canBeZero[testType][column+3]) return null;
00088 else return data[chip-4][column];
00089 }
00090 public String getSummaryTable() {
00091 StringBuffer table = new StringBuffer("<h3>"+title+"</h3>\n");
00092 table.append("<table border=1>\n");
00093 table.append("<tr><td>Chip</td>");
00094 for(int param=0;param<headers.length;param++) table.append("<td>"+headers[param]+"</td>");
00095 table.append("</tr>");
00096 for(int chip=0;chip<12;chip++) {
00097 table.append("<tr><td>"+chips[chip]+"</td>");
00098 for(int param=0;param<data[chip].length;param++) {
00099 if(data[chip][param]!=null)table.append("<td>"+data[chip][param].toString()+"</td>");
00100 }
00101 table.append("</tr>");
00102 }
00103 table.append("</table>\n");
00104 return table.toString();
00105 }
00106 }