IVTestInterface.java

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;  // sorted map of run*1e6+scan to IVInfo
00014    List table;
00015    IVInfo selectedIV;  // summary of IVscan info for a given run and scan number, for selected IV scan
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            //        if(gotIVInfo(run,scan)) {
00102            //           skipTest=true;
00103            //           continue;
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 // get voltage data for this run and scan no
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 // get voltage data for this run and scan no
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    

Generated on Mon Feb 6 14:12:13 2006 for SCT DAQ/DCS Software - Java by  doxygen 1.4.6