00001 package SummaryReader;
00002
00003
00004
00005
00006 public class IVTest {
00007
00008 java.util.List comments, vValues, iValues;
00009 TestInfo testInfo;
00010 DAQInfo daqInfo;
00011 DCSInfo dcsInfo;
00012 String serialNo;
00013 java.text.DecimalFormat nf = new java.text.DecimalFormat("#.###");
00014 java.util.regex.Pattern vstartPattern = java.util.regex.Pattern.compile("^Vstart\\s*:\\s*([-]?\\d+\\.\\d+).*");
00015 java.util.regex.Pattern vstopPattern = java.util.regex.Pattern.compile("^Vstop\\s*:\\s*([-]?\\d+\\.\\d+).*");
00016 java.util.regex.Pattern vstepPattern = java.util.regex.Pattern.compile("^Vstep\\s*:\\s*([-]?\\d+\\.\\d+).*");
00017 boolean DEBUG=false;
00018
00019 public IVTest() {
00020 comments = new java.util.ArrayList();
00021 vValues = new java.util.ArrayList();
00022 iValues = new java.util.ArrayList();
00023 }
00024
00025 public java.util.List getVList() {
00026 return new java.util.ArrayList(vValues);
00027 }
00028 public java.util.List getIList() {
00029 return new java.util.ArrayList(iValues);
00030 }
00031
00032 public void add(TestInfo testInfo) {
00033 this.testInfo=testInfo;
00034 }
00035 public void add(DAQInfo daqInfo) {
00036 this.daqInfo=daqInfo;
00037 }
00038 public void add(DCSInfo dcsInfo) {
00039 this.dcsInfo=dcsInfo;
00040 }
00041 public DCSInfo getDCSInfo() {
00042 return dcsInfo;
00043 }
00044 public TestInfo getTestInfo() {
00045 return testInfo;
00046 }
00047 public DAQInfo getDAQInfo() {
00048 return daqInfo;
00049 }
00050 public void setSerialNo(String serialNo) {
00051 this.serialNo = serialNo;
00052 }
00053 public String getSerialNo() {
00054 return serialNo;
00055 }
00056 public void addIVData(java.io.File rawDataFile) {
00057 String line;
00058 boolean readingIVData=false;
00059 java.util.regex.Matcher matcher;
00060 Double vstart=null, vstop=null, vstep=null;
00061 try {
00062 java.io.BufferedReader in = new java.io.BufferedReader(new java.io.FileReader(rawDataFile));
00063 while((line=in.readLine())!=null) {
00064 if(DEBUG) System.out.println("line: "+line);
00065 if(line.matches("^#V\\s*I.*")) {
00066 if(DEBUG) System.out.println("Start reading IV data...");
00067 readingIVData=true;
00068 continue;
00069 }
00070 if(line.matches("^#V\\s*microA.*")) {
00071 if(DEBUG) System.out.println("Stop reading IV data...");
00072 readingIVData=false;
00073 continue;
00074 }
00075 if(readingIVData) {
00076 double idata = Double.parseDouble(line.split("\\s+")[1]);
00077 if(DEBUG) System.out.println("Current = "+idata);
00078 iValues.add(Double.valueOf(nf.format(idata)));
00079 continue;
00080 }
00081 matcher = vstartPattern.matcher(line);
00082 if(matcher.matches()) {
00083 double data = Double.parseDouble(line.substring(matcher.start(1),matcher.end(1)));
00084 vstart = Double.valueOf(nf.format(data));
00085 if(DEBUG) System.out.println("Vstart="+vstart);
00086 continue;
00087 }
00088 matcher = vstopPattern.matcher(line);
00089 if(matcher.matches()) {
00090 double data = Double.parseDouble(line.substring(matcher.start(1),matcher.end(1)));
00091 vstop = Double.valueOf(nf.format(data));
00092 if(DEBUG) System.out.println("Vstop="+vstop);
00093 continue;
00094 }
00095 matcher = vstepPattern.matcher(line);
00096 if(matcher.matches()) {
00097 double data = Double.parseDouble(line.substring(matcher.start(1),matcher.end(1)));
00098 vstep = Double.valueOf(nf.format(data));
00099 if(DEBUG) System.out.println("Vstep="+vstep);
00100 continue;
00101 }
00102 }
00103 in.close();
00104 if(vstart==null || vstop==null || vstep==null) {
00105 System.err.println("SctGUI::SummaryReader::IVTest - Voltage information not found in raw data file "+rawDataFile.getName());
00106 return;
00107 }
00108 int nsteps = (int)((vstop.doubleValue()-vstart.doubleValue())/vstep.doubleValue()) +1;
00109 if(DEBUG) System.out.println("nsteps="+nsteps);
00110 for(int i=0;i<nsteps;i++) {
00111 Double data = new Double(vstart.doubleValue() +i*vstep.doubleValue());
00112 data = Double.valueOf(nf.format(data.doubleValue()));
00113 if(DEBUG) System.out.println("V["+i+"]="+data.toString());
00114 vValues.add(data);
00115 }
00116 if(vValues.size()!=iValues.size()) {
00117 System.err.println("SctGUI::SummaryReader::IVTest - Noncompatible I/V information in raw data file "+rawDataFile.getName());
00118 vValues = new java.util.ArrayList();
00119 iValues = new java.util.ArrayList();
00120 }
00121
00122 }catch(Exception e) {System.err.println("SctGUI::SummaryReader::IVTest - Exception reading in raw data file "+rawDataFile.getName()+" : "+e.toString());}
00123
00124
00125
00126 }
00127
00128
00129 public void addComment(String comment) {
00130 comments.add(comment);
00131 }
00132 public String getComment(int commentIndex) {
00133 return (String)comments.get(commentIndex);
00134 }
00135 public String getCommentsSummary() {
00136 StringBuffer table = new StringBuffer("<h3>Comments</h3>\n");
00137 if(comments.size()==0) {
00138 table.append("None");
00139 return table.toString();
00140 }
00141 for(int i=0;i<comments.size();i++) table.append((String)comments.get(i)+"\n");
00142 return table.toString();
00143 }
00144 public Double getCurrentData(int stepIndex) {
00145 return (Double)iValues.get(stepIndex);
00146 }
00147
00148
00149
00150 }