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 int sctView;
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(int sctView) {
00022 conf = ConfigurationInterface.getInstance();
00023 ivMap = new TreeMap();
00024 this.sctView=sctView;
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 Set moduleList = conf.getSortedVector(sctView);
00048
00049 for (Iterator j = moduleList.iterator(); j.hasNext(); ) {
00050 String thisSN=(String)j.next();
00051 String ivHeader = conf.getSNInfo(thisSN,SNInfo.IV_FILE_HEADER);
00052 java.io.File[] ivfiles = ivDir.listFiles(new ivFileFilter(ivHeader));
00053 for(int i=0;i<ivfiles.length;i++) getFileInfo(thisSN,ivfiles[i]);
00054 }
00055 }
00056 public List getTableList() {
00057 table = new ArrayList();
00058 for (Iterator i=ivMap.values().iterator(); i.hasNext(); ) {
00059 IVInfo ivInfo = (IVInfo)i.next();
00060 table.add(ivInfo);
00061 }
00062 return table;
00063 }
00064 public IVInfo getIVInfo(int index) {
00065 return (IVInfo)ivMap.values().toArray()[index];
00066 }
00067 public void getFileInfo(String serialNo,java.io.File filename) {
00068
00069 java.util.regex.Matcher matcher;
00070 IVInfo ivInfo = null;
00071 boolean nextLineIsTime=false;
00072 List scanList = new ArrayList();
00073 boolean skipTest=false;
00074 try {
00075 java.io.BufferedReader in = new java.io.BufferedReader(new java.io.FileReader(filename));
00076 String line;
00077 while((line=in.readLine())!=null) {
00078
00079 if(line.matches("^%NewTest")) {
00080 if(ivInfo!=null && ivInfo.isValid()) updateIVMap(serialNo,ivInfo);
00081 ivInfo = new IVInfo();
00082 skipTest=false;
00083 }
00084
00085 if(skipTest) continue;
00086
00087 if(line.startsWith("SERIAL NUMBER")) ivInfo.addModule(serialNo);
00088
00089 matcher = rPattern.matcher(line);
00090 if(matcher.matches()) {
00091 String scan = line.substring(matcher.start(2),matcher.end(2));
00092 String run = line.substring(matcher.start(1),matcher.end(1));
00093 Integer key = IVInfo.getIVKey(run,scan);
00094 if(scanList.contains(key)) {
00095 System.err.println("SctGUI::IVTestInterface - Duplicate run/scan number found in "+filename.getName());
00096 ivInfo.inValidate();
00097 skipTest=true;
00098 continue;
00099 }
00100 scanList.add(key);
00101 ivInfo.setRun(run);
00102 ivInfo.setScan(scan);
00103
00104
00105
00106
00107 }
00108 matcher = dPattern.matcher(line);
00109 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)));
00110
00111
00112 matcher = filenamePattern.matcher(line);
00113 if(matcher.matches()) {
00114 SummaryReader.IVTest ivTest = new SummaryReader.IVTest();
00115 java.io.File originalRawdataFile = new java.io.File(line.substring(matcher.start(1),matcher.end(1)));
00116 java.io.File rawDataFile = new java.io.File(filename.getParent(),originalRawdataFile.getName());
00117 ivTest.addIVData(rawDataFile);
00118 ivInfo.setVData(ivTest.getVList());
00119 }
00120
00121
00122 if(nextLineIsTime) ivInfo.setTime(line.replaceAll("\"",""));
00123
00124 nextLineIsTime = line.matches("^#TIME$");
00125 }
00126 in.close();
00127 if(ivInfo!=null && ivInfo.isValid()) updateIVMap(serialNo,ivInfo);
00128
00129 }catch(Exception e){System.err.println("SctGUI::IVTestInterface - Exception reading "+filename.getName()+" : "+e.toString());}
00130
00131 }
00132 private void updateIVMap(String serialNo,IVInfo ivInfo) {
00133 Integer key = ivInfo.getIVKey();
00134 IVInfo oldIVInfo = (IVInfo)ivMap.get(key);
00135 if(oldIVInfo==null) ivMap.put(key,ivInfo);
00136 else oldIVInfo.addModule(serialNo);
00137 }
00138 public boolean gotIVInfo(String run, String scan) {
00139 Integer key = IVInfo.getIVKey(run,scan);
00140 return ivMap.containsKey(key);
00141 }
00142
00143 public String getIVFileStem() {
00144 if(selectedIV==null) return null;
00145 return selectedIV.getFileStem();
00146 }
00147
00148 public String getDataString(Integer run,Integer scan, String module, String filestem) {
00149 java.util.regex.Matcher matcher;
00150 String ivHeader = conf.getSNInfo(module,SNInfo.IV_FILE_HEADER);
00151 StringBuffer dataString = new StringBuffer();
00152 String ivdirectory = PreferencesInterface.getInstance().getPreference(PreferencesInterface.IV_DIRECTORY);
00153 java.io.File dataFile;
00154 boolean skipTest=false;
00155 try {
00156 dataFile = new java.io.File(ivdirectory,ivHeader+filestem);
00157 java.io.BufferedReader in = new java.io.BufferedReader(new java.io.FileReader(dataFile));
00158 String line;
00159
00160 while((line=in.readLine())!=null) {
00161
00162 if(line.matches("^%NewTest")) {
00163 dataString = new StringBuffer();
00164 dataString.append(line+"\n");
00165 skipTest=false;
00166 continue;
00167 }
00168
00169 if(skipTest) continue;
00170
00171 matcher = rPattern.matcher(line);
00172 if(matcher.matches()) {
00173 String thisScan = line.substring(matcher.start(2),matcher.end(2));
00174 String thisRun = line.substring(matcher.start(1),matcher.end(1));
00175 if(!thisScan.equals(scan.toString()) || !thisRun.equals(run.toString())) {
00176 skipTest=true;
00177 continue;
00178 }
00179 }
00180
00181 matcher = filenamePattern.matcher(line);
00182 if(matcher.matches()) {
00183 SummaryReader.IVTest ivTest = new SummaryReader.IVTest();
00184 java.io.File originalRawdataFile = new java.io.File(line.substring(matcher.start(1),matcher.end(1)));
00185 java.io.File rawDataFile = new java.io.File(ivdirectory,originalRawdataFile.getName());
00186 ivTest.addIVData(rawDataFile);
00187 List iList = ivTest.getIList();
00188 List vList = ivTest.getVList();
00189 for(int i=0;i<vList.size();i++) dataString.append("IVDATA:"+((Double)vList.get(i)).toString()+":"+((Double)iList.get(i)).toString()+"\n");
00190 dataString.append("###END");
00191 break;
00192 }
00193 else dataString.append(line+"\n");
00194 }
00195 in.close();
00196 }catch(Exception e){System.err.println("SctGUI::IVTestInterface - "+e.toString()); return null;}
00197 if(skipTest) {
00198 System.err.println("SctGUI::IVTestInterface - no raw data for IVScan file "+dataFile.getName());
00199 return null;
00200 }
00201 return (dataString.length()==0) ? null : dataString.toString();
00202 }
00203
00204
00205
00206
00207
00208
00209
00210
00211 }
00212
00213
00214
00215
00216
00217
00218
00219
00220