00001 package DisplayGUI;
00002 import java.util.*;
00003 import Preferences.*;
00004
00010 public class IVTestInterface implements SummaryReader.regExpressions {
00011 Vector ivtests;
00012 ConfigurationInterface conf;
00013 SortedMap ivMap;
00014 List table;
00015 IVInfo selectedIV;
00016 Set moduleList;
00017 java.util.regex.Pattern rPattern = java.util.regex.Pattern.compile("^Run Number\\s*:\\s*(\\d+)-(\\d+)");
00018 java.util.regex.Pattern dPattern = java.util.regex.Pattern.compile("^TEST_DATE\\s*:\\s*(\\d{2})/(\\d{2})/(\\d{4})");
00019 java.util.regex.Pattern fPattern = java.util.regex.Pattern.compile("CRATE\\d{2}CHAN\\d{2}_(\\d4)(\\d{2})(\\d{2})\\.txt");
00020
00021 public IVTestInterface(Set moduleList) {
00022 conf = ConfigurationInterface.getInstance();
00023 ivMap = new TreeMap();
00024 this.moduleList=moduleList;
00025 }
00026 public void clear() {
00027 conf = ConfigurationInterface.getInstance();
00028 ivMap = new TreeMap();
00029 selectedIV=null;
00030 }
00031 public int getNoTests() {
00032 return ivMap.size();
00033 }
00034 public void refresh() {
00035
00036 String ivdirectory = PreferencesInterface.getInstance().getPreference(PreferencesInterface.IV_DIRECTORY);
00037 if(ivdirectory.equals(PreferencesInterface.unDefinedString)) {
00038 javax.swing.JOptionPane.showMessageDialog(null,"You have not defined the IV data directory. Please do this first in the Options->DCS menu.");
00039 return;
00040 }
00041 java.io.File ivDir = new java.io.File(ivdirectory);
00042 if(!ivDir.exists()) {
00043 javax.swing.JOptionPane.showMessageDialog(null,"Your IV Data directory does not exist! Please correct it in the Options->DCS menu.");
00044 return;
00045 }
00046
00047 for (Iterator j = moduleList.iterator(); j.hasNext(); ) {
00048 String thisSN=(String)j.next();
00049 String ivHeader = conf.getSNInfo(thisSN,SNInfo.IV_FILE_HEADER);
00050 java.io.File[] ivfiles = ivDir.listFiles(new ivFileFilter(ivHeader));
00051 for(int i=0;i<ivfiles.length;i++) getFileInfo(thisSN,ivfiles[i]);
00052 }
00053 }
00054 public List getTableList() {
00055 table = new ArrayList();
00056 for (Iterator i=ivMap.values().iterator(); i.hasNext(); ) {
00057 IVInfo ivInfo = (IVInfo)i.next();
00058 table.add(ivInfo);
00059 }
00060 return table;
00061 }
00062 public IVInfo getIVInfo(int index) {
00063 return (IVInfo)ivMap.values().toArray()[index];
00064 }
00065 public void getFileInfo(String serialNo,java.io.File filename) {
00066
00067 java.util.regex.Matcher matcher;
00068 IVInfo ivInfo = null;
00069 boolean nextLineIsTime=false;
00070 List scanList = new ArrayList();
00071 boolean skipTest=false;
00072 try {
00073 java.io.BufferedReader in = new java.io.BufferedReader(new java.io.FileReader(filename));
00074 String line;
00075 while((line=in.readLine())!=null) {
00076
00077 if(line.matches("^%NewTest")) {
00078 if(ivInfo!=null && ivInfo.isValid()) updateIVMap(serialNo,ivInfo);
00079 ivInfo = new IVInfo();
00080 skipTest=false;
00081 }
00082
00083 if(skipTest) continue;
00084
00085 if(line.startsWith("SERIAL NUMBER")) ivInfo.addModule(serialNo);
00086
00087 matcher = rPattern.matcher(line);
00088 if(matcher.matches()) {
00089 String scan = line.substring(matcher.start(2),matcher.end(2));
00090 String run = line.substring(matcher.start(1),matcher.end(1));
00091 Integer key = IVInfo.getIVKey(run,scan);
00092 if(scanList.contains(key)) {
00093 System.err.println("SctGUI::IVTestInterface - Duplicate run/scan number found in "+filename.getName());
00094 ivInfo.inValidate();
00095 skipTest=true;
00096 continue;
00097 }
00098 scanList.add(key);
00099 ivInfo.setRun(run);
00100 ivInfo.setScan(scan);
00101
00102
00103
00104
00105 }
00106 matcher = dPattern.matcher(line);
00107 if(matcher.matches()) ivInfo.setDate(line.substring(matcher.start(1),matcher.end(1)),line.substring(matcher.start(2),matcher.end(2)),line.substring(matcher.start(3),matcher.end(3)));
00108
00109
00110 matcher = filenamePattern.matcher(line);
00111 if(matcher.matches()) {
00112 SummaryReader.IVTest ivTest = new SummaryReader.IVTest();
00113 java.io.File originalRawdataFile = new java.io.File(line.substring(matcher.start(1),matcher.end(1)));
00114 java.io.File rawDataFile = new java.io.File(filename.getParent(),originalRawdataFile.getName());
00115 ivTest.addIVData(rawDataFile);
00116 ivInfo.setVData(ivTest.getVList());
00117 }
00118
00119
00120 if(nextLineIsTime) ivInfo.setTime(line.replaceAll("\"",""));
00121
00122 nextLineIsTime = line.matches("^#TIME$");
00123 }
00124 in.close();
00125 if(ivInfo!=null && ivInfo.isValid()) updateIVMap(serialNo,ivInfo);
00126
00127 }catch(Exception e){System.err.println("SctGUI::IVTestInterface - Exception reading "+filename.getName()+" : "+e.toString());}
00128
00129 }
00130 private void updateIVMap(String serialNo,IVInfo ivInfo) {
00131 Integer key = ivInfo.getIVKey();
00132 IVInfo oldIVInfo = (IVInfo)ivMap.get(key);
00133 if(oldIVInfo==null) ivMap.put(key,ivInfo);
00134 else oldIVInfo.addModule(serialNo);
00135 }
00136 public boolean gotIVInfo(String run, String scan) {
00137 Integer key = IVInfo.getIVKey(run,scan);
00138 return ivMap.containsKey(key);
00139 }
00140
00141 public String getIVFileStem() {
00142 if(selectedIV==null) return null;
00143 return selectedIV.getFileStem();
00144 }
00145
00146 public String getDataString(Integer run,Integer scan, String module, String filestem) {
00147 java.util.regex.Matcher matcher;
00148 String ivHeader = conf.getSNInfo(module,SNInfo.IV_FILE_HEADER);
00149 StringBuffer dataString = new StringBuffer();
00150 String ivdirectory = PreferencesInterface.getInstance().getPreference(PreferencesInterface.IV_DIRECTORY);
00151 java.io.File dataFile;
00152 boolean skipTest=false;
00153 try {
00154 dataFile = new java.io.File(ivdirectory,ivHeader+filestem);
00155 java.io.BufferedReader in = new java.io.BufferedReader(new java.io.FileReader(dataFile));
00156 String line;
00157
00158 while((line=in.readLine())!=null) {
00159
00160 if(line.matches("^%NewTest")) {
00161 dataString = new StringBuffer();
00162 dataString.append(line+"\n");
00163 skipTest=false;
00164 continue;
00165 }
00166
00167 if(skipTest) continue;
00168
00169 matcher = rPattern.matcher(line);
00170 if(matcher.matches()) {
00171 String thisScan = line.substring(matcher.start(2),matcher.end(2));
00172 String thisRun = line.substring(matcher.start(1),matcher.end(1));
00173 if(!thisScan.equals(scan.toString()) || !thisRun.equals(run.toString())) {
00174 skipTest=true;
00175 continue;
00176 }
00177 }
00178
00179 matcher = filenamePattern.matcher(line);
00180 if(matcher.matches()) {
00181 SummaryReader.IVTest ivTest = new SummaryReader.IVTest();
00182 java.io.File originalRawdataFile = new java.io.File(line.substring(matcher.start(1),matcher.end(1)));
00183 java.io.File rawDataFile = new java.io.File(ivdirectory,originalRawdataFile.getName());
00184 ivTest.addIVData(rawDataFile);
00185 List iList = ivTest.getIList();
00186 List vList = ivTest.getVList();
00187 for(int i=0;i<vList.size();i++) dataString.append("IVDATA:"+((Double)vList.get(i)).toString()+":"+((Double)iList.get(i)).toString()+"\n");
00188 dataString.append("###END");
00189 break;
00190 }
00191 else dataString.append(line+"\n");
00192 }
00193 in.close();
00194 }catch(Exception e){System.err.println("SctGUI::IVTestInterface - "+e.toString()); return null;}
00195 if(skipTest) {
00196 System.err.println("SctGUI::IVTestInterface - no raw data for IVScan file "+dataFile.getName());
00197 return null;
00198 }
00199 return (dataString.length()==0) ? null : dataString.toString();
00200 }
00201
00202
00203
00204
00205
00206
00207
00208
00209 }
00210
00211
00212
00213
00214
00215
00216
00217
00218