00001 package DisplayGUI;
00002
00003 import java.io.*;
00004 import java.util.*;
00005 import is.*;
00006 import Sct.Serializable;
00007 import Sct.IS.*;
00008
00009 import java.sql.*;
00010 import ProdDatabase.SCTDBInterface;
00011 import ProdDatabase.SCTDBInfo;
00012 import Sct_CalibrationController.TestData;
00013
00014
00015
00016
00017
00018
00023 public class SCTDBTestDownloader extends Thread implements SCTDBInfo, DisplayGUI.TestDataInfo {
00024 Vector listOfModules;
00025 int testIndex;
00026 String location;
00027 boolean isWarm;
00028 boolean refresh;
00029 boolean download;
00030
00031 String runString=null;
00032 boolean isSCTDAQData;
00033
00034 Vector runStrings=null;
00035
00036 java.text.DecimalFormat nf = new java.text.DecimalFormat("#.##");
00037
00038 java.util.regex.Pattern runP = java.util.regex.Pattern.compile("(\\d+)[-]?(\\d+)?");
00039
00040 int RUNNO=1;
00041 int SCANNO=2;
00042
00043 public static final double NODATA = -9999.;
00044
00045 public SCTDBTestDownloader(Vector listOfModules, int testIndex, String location, boolean isWarm, boolean refresh) {
00046 super("SCTDB_DOWNLOAD");
00047 this.listOfModules=listOfModules;
00048 this.testIndex=testIndex;
00049 this.location=location;
00050 this.isWarm=isWarm;
00051 this.refresh=refresh;
00052
00053 download=true;
00054 isSCTDAQData=true;
00055
00056 for(int i=listOfModules.size()-1;i>=0;i--) {
00057 String module = (String)listOfModules.elementAt(i);
00058 String objectName = "SCTDBData."+testNames[testIndex]+"."+location+"."+(String)listOfModules.elementAt(i);
00059
00060 if(SctNames.getISRepository().contains(objectName) && !refresh) {
00061 download=false;
00062 break;
00063 }
00064 }
00065
00066 if(testIndex==TEST_NMASK) download=false;
00067
00068 setPriority(Thread.MIN_PRIORITY);
00069
00070 }
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 public SCTDBTestDownloader(Vector runStrings, int testIndex, String location) {
00088
00089 super("SCTDB_DOWNLOAD");
00090 this.runStrings=runStrings;
00091 this.testIndex=testIndex;
00092 this.location=location;
00093 refresh=true;
00094
00095 download=true;
00096 isSCTDAQData=false;
00097
00098 setPriority(Thread.MIN_PRIORITY);
00099
00100 for(int i=0;i<runStrings.size();i++) System.out.println("Requested download for run-scan "+(String)runStrings.elementAt(i));
00101
00102 }
00103
00104
00105 public boolean downloadsRequired() {
00106 return download;
00107 }
00108 public boolean isOkToStart() {
00109 Thread[] allThreads = new Thread[Thread.activeCount()];
00110 Thread.enumerate(allThreads);
00111 for(int i=0;i<allThreads.length;i++) {
00112 if(allThreads[i]!=null && allThreads[i].getName().equals("SCTDB_DOWNLOAD") && allThreads[i].isAlive()) {
00113 javax.swing.JOptionPane.showMessageDialog(null,"A download from the SCT database is already in progress.\nPlease wait for this to complete before requesting another download.");
00114 return false;
00115 }
00116 }
00117 return true;
00118 }
00119
00120 public void run() {
00121
00122 Map snHash = new HashMap();
00123 Map testnoHash = new HashMap();
00124 Map dcsHash = new HashMap();
00125
00126 Statement statement;
00127 ResultSet resultSet;
00128
00129 StringBuffer moduleList = new StringBuffer();
00130 if(isSCTDAQData) {
00131 for(int i=0;i<listOfModules.size();i++) {
00132 if(i>0) moduleList.append(",");
00133 String module = (String)listOfModules.elementAt(i);
00134 moduleList.append(module);
00135 }
00136 System.out.println("SctGUI::SCTDBTestDownloader - Downloading "+listOfModules.size()+" module "+testNames[testIndex]+" tests.");
00137 }
00138 else System.out.println("SctGUI::SCTDBTestDownloader - Downloading SctRodDaq "+testNames[testIndex]+" data for "+Integer.toString(runStrings.size())+" tests");
00139
00140 StringBuffer sqlStat = new StringBuffer();
00141
00142 if(!isSCTDAQData) {
00143 if(!publishControlObject(runStrings,location,testIndex)) return;
00144 }
00145
00146
00147 sqlStat = new StringBuffer("SELECT tests.ser_no,tests.pass,tests.problem,tests.TEST_no,tests.locn_name,tests.TEST_date,tests.run_no");
00148 sqlStat.append(",SCT_TSTDAQINFO.host,SCT_TSTDAQINFO.version,SCT_TSTDAQINFO.test_time");
00149 switch(testIndex) {
00150 case SCTDB_TEST_RESET:
00151 case SCTDB_TEST_REDUNDANCY:
00152 case SCTDB_TEST_LONGTERM:
00153 case SCTDB_TEST_IV:
00154 break;
00155 default:
00156 for(int y=0;y<chipDBnames.length;y++) {
00157 for(int paramIndex=0;paramIndex<DBChipParameterNames[testIndex].length;paramIndex++) {
00158 sqlStat.append(","+chipDBnames[y]+DBChipParameterNames[testIndex][paramIndex]);
00159 }
00160 }
00161
00162 }
00163 sqlStat.append(" FROM "+sctdaqDBTableNames[testIndex]+",tests,SCT_TSTDAQINFO");
00164 if(isSCTDAQData) sqlStat.append(",sct_tstdcsinfo");
00165
00166 sqlStat.append(" WHERE tests.TEST_name = '"+sctdaqDBTestNames[testIndex]+"'");
00167 if(isSCTDAQData) sqlStat.append(" AND tests.ser_no IN ("+moduleList.toString()+")");
00168 if(!location.equals("Any")) sqlStat.append(" AND tests.locn_name LIKE '"+location+"'");
00169 sqlStat.append(" AND tests.TEST_no = "+sctdaqDBTableNames[testIndex]+".TEST_no");
00170 sqlStat.append(" AND tests.test_no = SCT_TSTDAQINFO.test_no");
00171 if(isSCTDAQData) {
00172 sqlStat.append(" AND SCT_TSTDAQINFO.version NOT LIKE 'SctRodDaq%'");
00173 if(isWarm) sqlStat.append(" AND sct_tstdcsinfo.t0>10 AND sct_tstdcsinfo.TEST_no=tests.TEST_no");
00174 else sqlStat.append(" AND sct_tstdcsinfo.t0<=10 AND sct_tstdcsinfo.TEST_no=tests.TEST_no");
00175 }
00176 else {
00177 StringBuffer s = new StringBuffer();
00178 for(int i=0;i<runStrings.size();i++) {
00179 if(i>0) s.append(",");
00180 s.append("'"+(String)runStrings.elementAt(i)+"'");
00181 }
00182 sqlStat.append(" AND tests.run_no IN ("+s.toString()+") AND SCT_TSTDAQINFO.version LIKE 'SctRodDaq%'");
00183 }
00184 sqlStat.append(" ORDER BY tests.TEST_date DESC,tests.TEST_no DESC");
00185
00186 try {
00187
00188 statement = SCTDBInterface.getInstance().connection.createStatement();
00189
00190 resultSet = statement.executeQuery(sqlStat.toString());
00191 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00192 int rc=1;
00193
00194 String sn = resultSet.getString(rc++);
00195 if(snHash.containsKey(sn)) continue;
00196 String passString = resultSet.getString(rc++);
00197 String problemString = resultSet.getString(rc++);
00198
00199 int status = (passString.equals("YES")) ? 0 : 2;
00200 if(status==0 && problemString.equals("YES")) status = 1;
00201
00202 SCTDB_Data sctdbData = new SCTDB_Data();
00203 sctdbData.status=status;
00204
00205 sctdbData.testIndex=testIndex;
00206 sctdbData.testNumber = resultSet.getString(rc++);
00207
00208 String location = resultSet.getString(rc++);;
00209 sctdbData.testLocation = location;
00210 location = location.replaceAll("\\s+","_");
00211 String date = guiUtilities.DaveUtils.extractDate(resultSet.getString(rc++));
00212 sctdbData.testDate=date;
00213 String runScan = resultSet.getString(rc++);
00214
00215
00216 sctdbData.daqInfo = new String[6];
00217 for(int i=0;i<3;i++) {
00218 String value = resultSet.getString(rc++);
00219 sctdbData.daqInfo[i] = (value==null) ? "Unknown" : value;
00220 }
00221 sctdbData.daqInfo[3]=date;
00222 sctdbData.daqInfo[4]=location;
00223 sctdbData.daqInfo[5]=runScan;
00224
00225 System.out.println("SctGUI::SCTDBTestDownloader - Downloading "+testNames[testIndex]+" for "+sn+" taken by "+sctdbData.testLocation+" on "+sctdbData.testDate);
00226
00227 System.out.println("**3");
00228 sctdbData.data_m0 = new double[DBChipParameterNames[testIndex].length];
00229 for(int r=0;r<DBChipParameterNames[testIndex].length;r++) sctdbData.data_m0[r]=getData(resultSet.getString(rc++));
00230 sctdbData.data_s1 = new double[DBChipParameterNames[testIndex].length];
00231 for(int r=0;r<DBChipParameterNames[testIndex].length;r++) sctdbData.data_s1[r]=getData(resultSet.getString(rc++));
00232 sctdbData.data_s2 = new double[DBChipParameterNames[testIndex].length];
00233 for(int r=0;r<DBChipParameterNames[testIndex].length;r++) sctdbData.data_s2[r]=getData(resultSet.getString(rc++));
00234 sctdbData.data_s3 = new double[DBChipParameterNames[testIndex].length];
00235 for(int r=0;r<DBChipParameterNames[testIndex].length;r++) sctdbData.data_s3[r]=getData(resultSet.getString(rc++));
00236 sctdbData.data_s4 = new double[DBChipParameterNames[testIndex].length];
00237 for(int r=0;r<DBChipParameterNames[testIndex].length;r++) sctdbData.data_s4[r]=getData(resultSet.getString(rc++));
00238 sctdbData.data_e5 = new double[DBChipParameterNames[testIndex].length];
00239 for(int r=0;r<DBChipParameterNames[testIndex].length;r++) sctdbData.data_e5[r]=getData(resultSet.getString(rc++));
00240 sctdbData.data_m8 = new double[DBChipParameterNames[testIndex].length];
00241 for(int r=0;r<DBChipParameterNames[testIndex].length;r++) sctdbData.data_m8[r]=getData(resultSet.getString(rc++));
00242 sctdbData.data_s9 = new double[DBChipParameterNames[testIndex].length];
00243 for(int r=0;r<DBChipParameterNames[testIndex].length;r++) sctdbData.data_s9[r]=getData(resultSet.getString(rc++));
00244 sctdbData.data_s10 = new double[DBChipParameterNames[testIndex].length];
00245 for(int r=0;r<DBChipParameterNames[testIndex].length;r++) sctdbData.data_s10[r]=getData(resultSet.getString(rc++));
00246 sctdbData.data_s11 = new double[DBChipParameterNames[testIndex].length];
00247 for(int r=0;r<DBChipParameterNames[testIndex].length;r++) sctdbData.data_s11[r]=getData(resultSet.getString(rc++));
00248 sctdbData.data_s12 = new double[DBChipParameterNames[testIndex].length];
00249 for(int r=0;r<DBChipParameterNames[testIndex].length;r++) sctdbData.data_s12[r]=getData(resultSet.getString(rc++));
00250 sctdbData.data_e13 = new double[DBChipParameterNames[testIndex].length];
00251 for(int r=0;r<DBChipParameterNames[testIndex].length;r++) sctdbData.data_e13[r]=getData(resultSet.getString(rc++));
00252
00253
00254 int index=0;
00255 switch(testIndex) {
00256 case SCTDB_TEST_PIPELINE:
00257 convertData(sctdbData,0);
00258 break;
00259 case SCTDB_TEST_TRIM:
00260 convertData(sctdbData,2);
00261 break;
00262 default:
00263 }
00264
00265
00266 snHash.put(sn,sctdbData);
00267 testnoHash.put(sctdbData.testNumber,new ArrayList());
00268
00269 }
00270 statement.close();
00271
00272 if(snHash.size()==0) {
00273 System.out.println("SctGUI::SCTDBTestDownloader - No Data available from SCTDB");
00274 return;
00275 }
00276 StringBuffer temp = new StringBuffer();
00277 int count=0;
00278 for (java.util.Iterator i = testnoHash.keySet().iterator(); i.hasNext(); ) {
00279 if(count>0) temp.append(",");
00280 count++;
00281 temp.append((String)i.next());
00282 }
00283 sqlStat = new StringBuffer();
00284 sqlStat.append("SELECT defects.TEST_no,defects.chan_1st,defects.chan_last,defects.defect_name");
00285 sqlStat.append(" FROM defects");
00286 sqlStat.append(" WHERE defects.TEST_no IN ("+temp.toString()+")");
00287
00288
00289 statement = SCTDBInterface.getInstance().connection.createStatement();
00290
00291 resultSet = statement.executeQuery(sqlStat.toString());
00292
00293 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00294 String thisTestNo = resultSet.getString(1);
00295 List tempHash = (List)testnoHash.get(thisTestNo);
00296 String channels = resultSet.getString(2)+"-"+resultSet.getString(3);
00297 String defect = resultSet.getString(4);
00298
00299 tempHash.add(channels+" : "+defect);
00300 }
00301 statement.close();
00302
00303 sqlStat = new StringBuffer();
00304 sqlStat.append("SELECT vdet,idet,t0,t1,vcc,icc,vdd,idd,test_no");
00305 sqlStat.append(" FROM SCT_TSTDCSINFO");
00306 sqlStat.append(" WHERE TEST_no IN ("+temp.toString()+")");
00307
00308
00309 statement = SCTDBInterface.getInstance().connection.createStatement();
00310
00311 resultSet = statement.executeQuery(sqlStat.toString());
00312
00313 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00314 SummaryReader.DCSInfo dcs = new SummaryReader.DCSInfo();
00315 try {
00316 String data = resultSet.getString(1);
00317
00318 if(data==null) data="-1";
00319 dcs.put(SummaryReader.DCSInfo.VDET,Double.parseDouble(data));
00320 data = resultSet.getString(2);
00321
00322 if(data==null) data="-1";
00323 dcs.put(SummaryReader.DCSInfo.IDET,Double.parseDouble(data));
00324 data = resultSet.getString(3);
00325
00326 if(data==null) data="-1";
00327 dcs.put(SummaryReader.DCSInfo.T0,Double.parseDouble(data));
00328 data = resultSet.getString(4);
00329
00330 if(data==null) data="-1";
00331 dcs.put(SummaryReader.DCSInfo.T1,Double.parseDouble(data));
00332 data = resultSet.getString(5);
00333
00334 if(data==null) data="-1";
00335 dcs.put(SummaryReader.DCSInfo.VCC,Double.parseDouble(data));
00336 data = resultSet.getString(6);
00337
00338 if(data==null) data="-1";
00339 dcs.put(SummaryReader.DCSInfo.ICC,Double.parseDouble(data));
00340 data = resultSet.getString(7);
00341
00342 if(data==null) data="-1";
00343 dcs.put(SummaryReader.DCSInfo.VDD,Double.parseDouble(data));
00344 data = resultSet.getString(8);
00345
00346 if(data==null) data="-1";
00347 dcs.put(SummaryReader.DCSInfo.IDD,Double.parseDouble(data));
00348 String testno=resultSet.getString(9);
00349
00350 dcsHash.put(testno,dcs);
00351 }catch(Exception dcsException){System.err.println("sctGUI - exception downloading dcs data - "+dcsException.toString());}
00352 }
00353 statement.close();
00354
00355 for (java.util.Iterator i = snHash.keySet().iterator(); i.hasNext(); ) {
00356 String sn = (String)i.next();
00357 SCTDB_Data sctdbData = (SCTDB_Data)snHash.get(sn);
00358 List defectlist = (List)testnoHash.get(sctdbData.testNumber);
00359
00360 sctdbData.noDefectChannels = defectlist.size();
00361 sctdbData.defectList = new String[defectlist.size()];
00362 for(int y=0;y<defectlist.size();y++) sctdbData.defectList[y]=(String)defectlist.get(y);
00363
00364 sctdbData.dcsinfo = new double[8];
00365 if(dcsHash.containsKey(sctdbData.testNumber)) {
00366 SummaryReader.DCSInfo dcs = (SummaryReader.DCSInfo)dcsHash.get(sctdbData.testNumber);
00367 if(dcs==null) for(int j=0;j<8;j++) sctdbData.dcsinfo[j]=NODATA;
00368 else {
00369 for(int j=0;j<8;j++) {
00370 Double dcsValue = (Double)dcs.get(j);
00371 if(dcsValue!=null) sctdbData.dcsinfo[j]=dcsValue.doubleValue();
00372 else {
00373 System.err.println("SctGUI::SCTDBTestDownloader - Null dcs data for parameter "+j);
00374 sctdbData.dcsinfo[j]=NODATA;
00375 }
00376 }
00377 }
00378 }
00379 else {
00380 for(int j=0;j<8;j++) sctdbData.dcsinfo[j]=NODATA;
00381 }
00382 String runString = sctdbData.daqInfo[5];
00383 java.util.regex.Matcher matcher = runP.matcher(runString);
00384 if(matcher.matches()) {
00385 String thisRun = runString.substring(matcher.start(RUNNO),matcher.end(RUNNO));
00386 String thisScan = runString.substring(matcher.start(SCANNO),matcher.end(SCANNO));
00387
00388
00389 String objectName = isSCTDAQData ? "SCTDBData."+testNames[testIndex]+"."+location+"."+sn : "SCTDBData."+location+".Summary."+thisRun+"."+thisScan+"."+sn;
00390
00391 if(SctNames.getISRepository().contains(objectName)) {
00392 if(!refresh) continue;
00393 SctNames.getISRepository().remove(objectName);
00394 }
00395 SctNames.getISRepository().insert(objectName, sctdbData);
00396 System.out.println("SctGUI::SCTDBTestDownloader - SCTDB Object published as "+objectName);
00397 }
00398 else System.out.println("Invalid run/scan for "+sn+" : "+runString);
00399 }
00400
00401
00402 if(isSCTDAQData) {
00403 int notDownloaded = listOfModules.size()-snHash.size();
00404 if(notDownloaded>0) {
00405 for(int i=0;i<listOfModules.size();i++) {
00406 String module = (String)listOfModules.elementAt(i);
00407 if(!snHash.containsKey(module)) System.out.println("SctGUI::SCTDBTestDownloader - No "+testNames[testIndex]+" data available for "+(String)listOfModules.elementAt(i));
00408 }
00409 }
00410 }
00411
00412 }catch(Exception e) {System.out.println("SctGUI::SCTDBTestDownloader - Failed to publish SCTDB Data: "+e.toString());}
00413
00414
00415 }
00416
00417 private boolean publishControlObject(Vector runStrings, String location, int testIndex) {
00418 List mList = new ArrayList();
00419 StringBuffer sqlStat = new StringBuffer();
00420 String testno=null;
00421 String version = null;
00422
00423 try {
00424
00425 for(int r=0;r<runStrings.size();r++) {
00426 String runString = (String)runStrings.elementAt(r);
00427 java.util.regex.Matcher matcher = runP.matcher(runString);
00428 if(!matcher.matches()) {
00429 System.out.println("invalid runString "+runString);
00430 continue;
00431 }
00432 String run = runString.substring(matcher.start(RUNNO),matcher.end(RUNNO));
00433 String scan = runString.substring(matcher.start(SCANNO),matcher.end(SCANNO));
00434
00435 String controlObjectName = "SCTDBData.ControlData.SctRodDaqRefData."+testNames[testIndex]+"."+location+"."+run+"."+scan;
00436 if(SctNames.getISRepository().contains(controlObjectName)) return true;
00437
00438 sqlStat = new StringBuffer("SELECT tests.test_no,tests.ser_no,SCT_TSTDAQINFO.version FROM tests,SCT_TSTDAQINFO WHERE tests.run_no = '"+runString+"' AND SCT_TSTDAQINFO.version LIKE 'SctRodDaq%'");
00439 sqlStat.append(" AND tests.test_no = SCT_TSTDAQINFO.test_no AND tests.locn_name LIKE '"+location+"'");
00440 sqlStat.append(" AND tests.TEST_name = '"+sctdaqDBTestNames[testIndex]+"'");
00441 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
00442
00443
00444 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00445 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00446 testno = resultSet.getString(1);
00447 mList.add(resultSet.getString(2));
00448 version = resultSet.getString(3);
00449 }
00450 statement.close();
00451
00452 if(mList.size()==0) {
00453 System.err.println("SctGUI::SCTDBTestDownloader - no modules found for run-scan "+runString);
00454 return false;
00455 }
00456
00457 int noPoints=-1;
00458 String[] pointValues = new String[16];
00459 if(testno!=null) {
00460 sqlStat = new StringBuffer("SELECT POINT_TYPE,N_POINTS");
00461 for(int i=0;i<16;i++) sqlStat.append(",POINT_"+i);
00462 sqlStat.append(" FROM SCT_TSTSCANINFO WHERE TEST_NO="+testno);
00463 statement = SCTDBInterface.getInstance().connection.createStatement();
00464
00465 resultSet = statement.executeQuery(sqlStat.toString());
00466
00467 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00468 String point_type = resultSet.getString(1);
00469 String nPoints = resultSet.getString(2);
00470 noPoints = Integer.parseInt(nPoints);
00471 for(int i=0;i<16;i++) pointValues[i]=resultSet.getString(i+3);
00472 }
00473 statement.close();
00474 }
00475 TestData testData = new TestData();
00476 testData.testName = testNames[testIndex];
00477 testData.runNumber = Integer.parseInt(run);
00478 testData.nScans = (noPoints!=-1) ? noPoints : 1;
00479 testData.startScanNumber = Integer.parseInt(scan);
00480 testData.testVariable = 0;
00481 if(noPoints!=-1) {
00482 testData.testPoints = new double[noPoints];
00483 for(int i=0;i<noPoints;i++) testData.testPoints[i] = Double.parseDouble(pointValues[i]);
00484 }
00485 else {
00486 testData.testPoints = new double[1];
00487 testData.testPoints[0]=0.;
00488 }
00489 testData.status=TestData.COMPLETED;
00490 testData.startTime = "";
00491 testData.endTime = "";
00492 testData.modules = new String[mList.size()];
00493 for(int i=0;i<mList.size();i++) testData.modules[i] = new String((String)mList.get(i));
00494 testData.version = 0;
00495
00496 SctNames.getISRepository().insert(controlObjectName, testData);
00497 System.out.println("SctGUI::SCTDBTestDownloader - Published control object "+controlObjectName);
00498 }
00499 }catch(Exception e) {
00500 System.err.println("SctGUI::SCTDBTestDownloader - Exception creating control object - "+e.toString());
00501 return false;
00502 }
00503 return true;
00504 }
00505
00506
00507
00508 private void convertData(SCTDB_Data sctdbData, int index) {
00509 sctdbData.data_m0[index]=128.-sctdbData.data_m0[index];
00510 sctdbData.data_s1[index]=128.-sctdbData.data_s1[index];
00511 sctdbData.data_s2[index]=128.-sctdbData.data_s2[index];
00512 sctdbData.data_s3[index]=128.-sctdbData.data_s3[index];
00513 sctdbData.data_s4[index]=128.-sctdbData.data_s4[index];
00514 sctdbData.data_e5[index]=128.-sctdbData.data_e5[index];
00515 sctdbData.data_m8[index]=128.-sctdbData.data_m8[index];
00516 sctdbData.data_s9[index]=128.-sctdbData.data_s9[index];
00517 sctdbData.data_s10[index]=128.-sctdbData.data_s10[index];
00518 sctdbData.data_s11[index]=128.-sctdbData.data_s11[index];
00519 sctdbData.data_s12[index]=128.-sctdbData.data_s12[index];
00520 sctdbData.data_e13[index]=128.-sctdbData.data_e13[index];
00521 }
00522 private double getData(String dataString) {
00523 double data = -1.;
00524 try {
00525 data = Double.parseDouble(dataString);
00526 }catch(Exception e) {
00527 dataString = dataString.toLowerCase();
00528 if(dataString.equals("not tested")) data=0.;
00529 else if(dataString.equals("minimal tested")) data=1.;
00530 else System.err.println("Unrecognised data from SCT database: "+dataString);
00531 }
00532 return data;
00533 }
00534
00535
00536
00537 }