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