HarnessTestView.java

00001 package GuiComponents.SctApi;
00002 
00003 import javax.swing.*;
00004 import javax.swing.table.*;
00005 
00006 import java.awt.*;
00007 import java.awt.event.*;
00008 import java.io.*;
00009 import javax.swing.table.AbstractTableModel;
00010 import javax.swing.table.TableCellRenderer;
00011 import javax.swing.table.TableModel;
00012 import javax.swing.table.TableColumn;
00013 import javax.swing.table.JTableHeader;
00014 import java.lang.Math;
00015 import java.lang.Object;
00016 
00017 import GuiComponents.System.SystemInterface;
00018 //for cell color
00019 import java.awt.Component;
00020 import java.awt.Color;
00021 import javax.swing.JTable;
00022 import javax.swing.table.DefaultTableCellRenderer;
00023 
00024 
00025 //this class represent the main panel
00026 public class HarnessTestView extends JPanel {
00027     Sct_SctApi.SctApiIPC api;
00028     Sct_SctApi.SctApiDDCServer apiDDC;
00029 
00030     SystemInterface sys;
00031     sctConf.Configuration conf;
00032 
00033     int maxHarnessOnROD = 8;
00034     int maxDoglegNumberInHarness = 6;
00035 
00036     short ps_state = 2; //Deafult = STANDBY STATE (ps_state=2)
00037     String passedFailed;
00038     String dataFile;
00039     String log_root = "/work/ppatlas4/logs/HarnessTest"; //NB: getenv is deprecated!!
00040     org.omg.CORBA.IntHolder  murID;
00041 
00042     int m_partition = 0;
00043     int m_crate = 0;
00044     int m_rod = 0;
00045     int m_select = -1;
00046 
00047     int [] m_harnessList;
00048     int m_harnessMax = 0;
00049     int m_rxThreshold = 128;
00050     int m_txCurrent = 160;
00051     short [][] m_daq_scanResults;  
00052     float [][] m_dcs_scanResults; 
00053     String[][] m_daq_scanResultsTable;
00054     String[][] m_dcs_scanResultsTable;
00055     String[][][] m_summary_scanResults;
00056     /*
00057     String [] psChannelParametersList = {"LVchCLKS","LVch_Vcc", "LVch_Icc", "LVch_Vdd", "LVch_Idd", 
00058                                          "LVchVCSV", "LVchVCSI", "LVchPINV", "LVchPINI", 
00059                                          "MOch_Tm0", "MOch_Tm1", "LVps_Vcc", "LVps_Vdd",    
00060                                          "LVretVcc", "LVretVdd", "HVchVolt", "HVchCurr"};*/
00061 
00062     String [] psChannelParametersList = {"LVchStat", "LVch_Icc", "LVch_Idd", "LVchVCSI", "LVchPINI","MOch_Tm0", 
00063                                          "MOch_Tm1", "HVchCurr"};
00064     /*
00065     String [] psChannelParametersList_short = {"CLKS","Vcc","Icc", "Vdd", "Idd", 
00066                                                "VCSV", "VCSI", "PINV", "PINI", 
00067                                                "Tm0", "Tm1", "psVcc", "psVdd",    
00068                                                "retVcc", "retVdd", "HV", "HVCu"};*/
00069 
00070     String [] psChannelParametersList_short = {"Status", "Icc", "Idd", "VCSI", "PINI", "Tm0", "Tm1", "HVCu"};
00071 
00072     //upper and lower limits for each parameter in the previous list
00073 float psChannelParametersLimits[][] = 
00074     { 
00075         {(float)-999999, (float)999999},     //"LVchStat"// nosense limits
00076         {(float)55, (float)115},     //"LVch_Icc"
00077         {(float)175, (float)245},    //"LVch_Idd"
00078         {(float)1.80,(float)2.40 },  //"LVchVCSI"
00079         {(float)0.20, (float)1.00},  //"LVchPINI" // changed PWP 05.08.04 and again 10.09.04
00080         {(float)20, (float)30},      //"MOch_Tm0"
00081         {(float)5, (float)10},       //"MOch_Tm1"
00082         {(float)140, (float)160},    //"HVchCurr"  For 200V use {(float)190, (float)210},      //"HVchCurr"
00083     };
00084     /*
00085     float psChannelParametersLimits[][] = 
00086     { 
00087         {(float)0, (float)1},        //"LVchCLKS"
00088         {(float)3.45, (float)3.55},  //"LVch_Vcc"
00089         {(float)35, (float)105},     //"LVch_Icc"
00090         {(float)3.95, (float)4.05},  //"LVch_Vdd"
00091         {(float)175, (float)245},    //"LVch_Idd"
00092         {(float)3.90, (float)4.20},  //"LVchVCSV"
00093         {(float)1.80,(float)2.40 },  //"LVchVCSI"
00094         {(float)5.95, (float)6.05},  //"VchPINV"
00095         {(float)0.1, (float)0.3},    //"VchPINI"
00096         {(float)24, (float)26},      //"MOch_Tm0"
00097         {(float)7, (float)9},        //"MOch_Tm1"
00098         {(float)3.5, (float)3.6},    //"LVps_Vcc"
00099         {(float)4.1, (float)4.3},    //"LVps_Vdd"
00100         {(float)0.02, (float)0.1},   //"LVretVcc"
00101         {(float)0.10, (float)0.18},  //"LVretVdd"
00102         {(float)140, (float)160},    //"HVchVolt"
00103         {(float)140, (float)160},    //"HVchCurr"
00104     };
00105     */
00106     //DCS Parameters:
00107     org.omg.CORBA.IntHolder ps_partition;
00108     org.omg.CORBA.IntHolder ps_crate;
00109     org.omg.CORBA.IntHolder [] [] ps_channel;
00110     int selectLine = 2; //Default: Perform Normal then Redundant Scans, SelectLine = 2 
00111     String [] psChannelParameterList;   
00112     float [][] dcs_scanResults_select0Harness0;
00113     float [][] dcs_scanResults_select0Harness1;
00114     float [][] dcs_scanResults_select1Harness0;
00115     float [][] dcs_scanResults_select1Harness1;
00116     
00117     Boolean dcsScanCompletedSelect0Harness0 = Boolean.FALSE;
00118     Boolean dcsScanCompletedSelect0Harness1 = Boolean.FALSE;
00119     Boolean dcsScanCompletedSelect1Harness0 = Boolean.FALSE;
00120     Boolean dcsScanCompletedSelect1Harness1 = Boolean.FALSE;
00121     
00122     // ColorRenderer myRenderer;
00123 
00124     public HarnessTestView(Sct_SctApi.SctApiIPC a) {
00125         api = a;
00126         apiDDC = SystemInterface.getInstance().getSctApiDDCServer();
00127         
00128         murID = new org.omg.CORBA.IntHolder();
00129         ps_partition = new org.omg.CORBA.IntHolder();
00130         ps_crate = new org.omg.CORBA.IntHolder();
00131         ps_channel = new org.omg.CORBA.IntHolder[8][maxDoglegNumberInHarness];
00132         for(int i=0; i<8; i++){
00133            for(int j=0;j<maxDoglegNumberInHarness;j++){
00134               ps_channel[i][j]= new org.omg.CORBA.IntHolder();
00135            }
00136         }
00137 
00138         m_daq_scanResults = new short[0][0]; 
00139         m_daq_scanResultsTable = new String[25][12];
00140 
00141         m_dcs_scanResults = new float[psChannelParametersList.length][maxDoglegNumberInHarness];
00142         //.length+1, below, because of the last table column "P/F" giving the test results
00143         m_dcs_scanResultsTable =  new String[psChannelParametersList.length+1][maxDoglegNumberInHarness];
00144 
00145         for(int row=0; row<25; row++)
00146             for(int column=0; column<12; column++)
00147                  m_daq_scanResultsTable[row][column] = "?";
00148         
00149         sys = SystemInterface.getInstance();
00150         conf = sys.getConfigurationService();
00151        
00152         // How many harnesses are in the configuration?
00153         // For each that exists, obtain DCS map information
00154 
00155         m_harnessMax=0;
00156         m_harnessList = new int[8];
00157 
00158         if(conf!=null){
00159            for(int harness=0; harness<maxHarnessOnROD; harness++){
00160                try{
00161                    System.out.println("part " + m_partition + " crate " + m_crate + " rod " + m_rod + " harness " + harness);
00162                    conf.getMapRODMUR(m_partition, m_crate, m_rod, harness, murID);
00163                    System.out.println(" harness " + harness + " MUR " + murID.value);
00164 
00165                    m_harnessList[m_harnessMax] = harness;
00166                    m_harnessMax++;
00167 
00168                    for(int module=1; module<=6; module++){ //different numbering convention: module 1-6
00169                       conf.translateToPowerSupply(murID.value, module, ps_partition, ps_crate, ps_channel[m_harnessMax-1][module-1]);
00170                       System.out.println("Map for harness "+harness +" chan " + module + "ps chan " + ps_channel[m_harnessMax-1][module-1].value);
00171                    }
00172                 }
00173                 catch(sctConf.ConfigurationException e) {
00174                    System.out.println("No MUR at harness " + harness);
00175                 }
00176             } 
00177         }else{
00178             javax.swing.JOptionPane.showMessageDialog(null, "Unable to connect to the configuration service");
00179         }
00180  
00181         passedFailed = "?";
00182         initComponents();
00183 
00184         //this is just to create an empty file!!
00185         dataFile = fileNameValue.getText();
00186         File dataFile_withpath = new File(dataFile);
00187         try{BufferedWriter out = new BufferedWriter(new FileWriter(dataFile, false));   out.close();}
00188         catch(IOException e) {javax.swing.JOptionPane.showMessageDialog(null, "Failed to Open File? " + dataFile_withpath.getPath());}
00189 
00190 
00191 
00192        modifyComponents();
00193     }//end of constructor HarnessTestView
00194 
00195     // For beanability
00196     public HarnessTestView() 
00197     {
00198         initComponents();
00199         modifyComponents();
00200     }
00201 
00202     public void modifyComponents() {
00203         //updateResultsPanel();
00204     }
00205 
00211     private void initComponents() 
00212 {
00213    topPanel = new javax.swing.JPanel();
00214    panelForLabels = new javax.swing.JPanel();
00215    partitionLabel = new javax.swing.JLabel();
00216    crateLabel = new javax.swing.JLabel();
00217    rodLabel = new javax.swing.JLabel();
00218    harnessMaxLabel = new javax.swing.JLabel();
00219    rxLabel = new javax.swing.JLabel();
00220    txLabel = new javax.swing.JLabel();
00221    fileNameLabel = new javax.swing.JLabel();
00222 
00223    partitionValue = new javax.swing.JTextField();
00224    crateValue = new javax.swing.JTextField();
00225    rodValue = new javax.swing.JTextField();
00226    harnessMaxValue = new javax.swing.JTextField();
00227    rxThValue = new javax.swing.JTextField();
00228    txCurrentValue = new javax.swing.JTextField();
00229    fileNameValue = new javax.swing.JTextField();
00230    panelForClose = new javax.swing.JPanel();
00231    closeButton = new javax.swing.JButton();
00232    //the tab panels: we have three main tabs: "Test", "DAQ Data" and "DCS Data"
00233    jTabbedPaneTest = new javax.swing.JTabbedPane();
00234    jTabbedPaneDAQData = new javax.swing.JTabbedPane();
00235    jTabbedPaneDCSData = new javax.swing.JTabbedPane();
00236 
00237    setLayout(new java.awt.BorderLayout());
00238    
00239    add(panelForClose, java.awt.BorderLayout.SOUTH);
00240       panelForClose.setOpaque(false);
00241       panelForClose.add(closeButton);
00242          closeButton.setText("Close");
00243          closeButton.addActionListener(
00244               new java.awt.event.ActionListener() 
00245                   {
00246                       public void actionPerformed(java.awt.event.ActionEvent evt) 
00247                          {
00248                              closeButtonPerformed(evt);
00249                          }
00250                  });
00251 
00252    add(topPanel, java.awt.BorderLayout.NORTH);
00253       topPanel.setLayout(new javax.swing.BoxLayout(topPanel, javax.swing.BoxLayout.Y_AXIS));
00254       topPanel.add(panelForLabels);
00255          panelForLabels.setLayout(new javax.swing.BoxLayout(panelForLabels, javax.swing.BoxLayout.X_AXIS));
00256 
00257          panelForLabels.add(partitionLabel);
00258             partitionLabel.setText("  Partition ");
00259          panelForLabels.add(partitionValue);
00260             partitionValue.setText(Integer.toString(m_partition));
00261             partitionValue.addActionListener
00262             (new java.awt.event.ActionListener(){
00263               public void actionPerformed(java.awt.event.ActionEvent evt) {
00264                 m_partition = Integer.parseInt(partitionValue.getText());
00265               }
00266             });
00267 
00268          panelForLabels.add(crateLabel);
00269             crateLabel.setText("  Crate ");
00270          panelForLabels.add(crateValue);
00271             crateValue.setText(Integer.toString(m_crate));
00272             crateValue.addActionListener
00273             (new java.awt.event.ActionListener(){
00274               public void actionPerformed(java.awt.event.ActionEvent evt) {
00275                 m_crate = Integer.parseInt(crateValue.getText());
00276               }
00277             });
00278 
00279          panelForLabels.add(rodLabel);
00280             rodLabel.setText("  ROD ");
00281          panelForLabels.add(rodValue);
00282             rodValue.setText(Integer.toString(m_rod));
00283             rodValue.addActionListener
00284             (new java.awt.event.ActionListener(){
00285               public void actionPerformed(java.awt.event.ActionEvent evt) {
00286                 m_rod = Integer.parseInt(rodValue.getText());
00287               }
00288             });
00289 
00290          panelForLabels.add(harnessMaxLabel);
00291             harnessMaxLabel.setText("  HarnessMax ");
00292          panelForLabels.add(harnessMaxValue);
00293             harnessMaxValue.setText(Integer.toString(m_harnessMax));
00294             harnessMaxValue.addActionListener
00295             (new java.awt.event.ActionListener(){
00296               public void actionPerformed(java.awt.event.ActionEvent evt) {
00297                 m_harnessMax = Integer.parseInt(harnessMaxValue.getText());
00298                 createTabs(m_harnessMax);
00299               }
00300             });
00301 
00302          panelForLabels.add(rxLabel);
00303             rxLabel.setText("  Rx Threshold ");
00304          panelForLabels.add(rxThValue);
00305             //rxThValue.setText(Integer.toString(m_rxThreshold));
00306             rxThValue.setText("?");
00307             rxThValue.addActionListener
00308             (new java.awt.event.ActionListener(){
00309               public void actionPerformed(java.awt.event.ActionEvent evt) {
00310                 if(api!=null){
00311                   m_rxThreshold = Integer.parseInt(rxThValue.getText());
00312                   for(int harness = 0;  harness < m_harnessMax; harness++){
00313                     for(int channel = (m_harnessList[harness]*6); channel < ((m_harnessList[harness]+1)*6); channel++){
00314                       api.modifyBOCParam(m_partition,m_crate,m_rod,channel,50,m_rxThreshold); // ST_RX_THRESHOLD
00315                     }
00316                   }
00317                   //api.saveBOCSetup(m_partition,m_crate,m_rod);
00318                 }
00319               }
00320             });
00321 
00322          panelForLabels.add(txLabel);
00323             txLabel.setText("  Tx Current ");
00324          panelForLabels.add(txCurrentValue);
00325             //txCurrentValue.setText(Integer.toString(m_txCurrent));
00326             txCurrentValue.setText("?");
00327             txCurrentValue.addActionListener
00328             (new java.awt.event.ActionListener(){
00329               public void actionPerformed(java.awt.event.ActionEvent evt) {
00330                 m_txCurrent = Integer.parseInt(txCurrentValue.getText());
00331                 if(api!=null){
00332                   for(int harness = 0;  harness < m_harnessMax; harness++){
00333                     for(int channel = (m_harnessList[harness]*6); channel < ((m_harnessList[harness]+1)*6); channel++){
00334                       api.modifyBOCParam(m_partition,m_crate,m_rod,channel,53,m_txCurrent); // ST_TX_CURRENT 
00335                     }
00336                   }
00337                 }
00338               }
00339             });
00340 
00341          panelForLabels.add(fileNameLabel);
00342             fileNameLabel.setText("  FileName ");
00343          panelForLabels.add(fileNameValue);
00344          java.util.Date date = new java.util.Date();
00345          String timeStampForDataFile = date.getDate() + "_" + date.getMonth() + "_" + date.getYear() + "_"+ date.getHours()+ "." + date.getMinutes() +  "." + date.getSeconds();
00346          String this_dataFile = log_root + "/saved_data/" + "harnessData_" + timeStampForDataFile + ".txt";
00347             fileNameValue.setText(this_dataFile);
00348 
00349    //create the Tabs
00350    createTabs(m_harnessMax);
00351 }//end of void initComponents() 
00352 
00353 private void createTabs(int harnessMax)
00354 { 
00355     //some initialisation
00356     m_summary_scanResults = new String[m_harnessMax][6][6];
00357     for(int harness=0; harness<m_harnessMax; harness++){
00358         for(int test=0; test<6; test++){
00359             for(int module=0; module<6; module++){
00360                 m_summary_scanResults[harness][test][module] = "?";
00361             }
00362         }
00363     }
00364     //this is the main tab (here one puts the main tabs: Test, DAQ Data,...etc.)
00365     add(jTabbedPaneTest, java.awt.BorderLayout.CENTER);
00366     //remove all the tabs (to put others)
00367     jTabbedPaneTest.removeAll();
00368 
00369     //=============== this is the "Test" tab ============================================================
00370 
00371     summaryScrollPanelForTable = new javax.swing.JScrollPane[m_harnessMax];
00372     summaryHarnessTable = new javax.swing.JTable[m_harnessMax];
00373     summaryHarnessTableModels = new HarnessTestsSummaryTableModel[m_harnessMax];
00374 
00375     summaryHarnessPanel = new javax.swing.JPanel();
00376     jTabbedPaneTest.addTab("Test", summaryHarnessPanel);
00377         summaryHarnessPanel.setLayout(new javax.swing.BoxLayout(summaryHarnessPanel, javax.swing.BoxLayout.Y_AXIS));
00378         summaryHarnessPanel.setPreferredSize(new Dimension(150,180));
00379         performHarnessTestButton = new javax.swing.JButton();
00380         summaryHarnessPanel.add(performHarnessTestButton, java.awt.BorderLayout.CENTER);
00381               performHarnessTestButton.setText("Perform Harness Test");
00382               performHarnessTestButton.addActionListener(
00383               new java.awt.event.ActionListener() {
00384                   public void actionPerformed(java.awt.event.ActionEvent evt) {
00385                       doTestsForAllHarnesses();
00386                   }
00387               });
00388 
00389         for(int index=0; index<m_harnessMax; index++){
00390             summaryScrollPanelForTable[index] = new javax.swing.JScrollPane();
00391             summaryHarnessPanel.add(summaryScrollPanelForTable[index], java.awt.BorderLayout.CENTER);
00392             summaryHarnessTable[index] = new javax.swing.JTable();
00393             summaryScrollPanelForTable[index].setViewportView(summaryHarnessTable[index]);
00394 
00395             summaryHarnessTable[index].setFont(new java.awt.Font("Monospaced", 0, 12));
00396             String[] columnsNames = {"Harness ","DAQ Select 0","DAQ Select 1","DCS Select 0","DCS Select 1",
00397                                      "DCS S0vsS1", "RESULTS"};
00398             columnsNames[0] =  columnsNames[0]+m_harnessList[index];
00399             summaryHarnessTableModels[index] =  new HarnessTestsSummaryTableModel(m_harnessList[index],columnsNames);
00400             summaryHarnessTableModels[index].newData(m_summary_scanResults[index]);
00401             summaryHarnessTable[index].setModel(summaryHarnessTableModels[index]);
00402             //for cell color
00403             changeSummaryTableCellsColor(summaryHarnessTable[index]);
00404         }
00405 
00406     //============== this is the "DAQ Data" tab =========================================================
00407 
00408     jTabbedPaneTest.addTab("DAQ Data",jTabbedPaneDAQData);
00409     //remove all the tabs (to put others)
00410     jTabbedPaneDAQData.removeAll();
00411 
00412     daqHaernessPanels = new javax.swing.JPanel[m_harnessMax];
00413     daqPanelForLabels = new javax.swing.JPanel[m_harnessMax];
00414     daqSelectLineLabel = new javax.swing.JLabel[m_harnessMax];
00415     daqSelectLineChoices = new javax.swing.JComboBox[m_harnessMax];
00416     performDAQScanButton = new javax.swing.JButton[m_harnessMax];
00417     daqScrollPanelForTable_Select0 = new javax.swing.JScrollPane[m_harnessMax];
00418     daqHarnessTable_Select0 = new javax.swing.JTable[m_harnessMax];
00419     daqHarnessTableModels_Select0 =  new SamplingDataTableModel[m_harnessMax];
00420     daqPanelForSecondTable = new javax.swing.JPanel[m_harnessMax];
00421     daqScrollPanelForTable_Select1 = new javax.swing.JScrollPane[m_harnessMax];
00422     daqHarnessTable_Select1 = new javax.swing.JTable[m_harnessMax];
00423     daqHarnessTableModels_Select1 =  new SamplingDataTableModel[m_harnessMax];
00424    
00425     for(int index=0; index<m_harnessMax; index++) {
00426         daqHaernessPanels[index] = new javax.swing.JPanel();
00427         jTabbedPaneDAQData.addTab("Harness "+ m_harnessList[index], daqHaernessPanels[index]);
00428         daqPanelForLabels[index] = new javax.swing.JPanel();
00429         daqHaernessPanels[index].setLayout(new java.awt.BorderLayout());
00430         daqHaernessPanels[index].add(daqPanelForLabels[index], java.awt.BorderLayout.NORTH);
00431         daqPanelForLabels[index].setLayout(new javax.swing.BoxLayout(daqPanelForLabels[index], 
00432                                                                          javax.swing.BoxLayout.X_AXIS));
00433         daqSelectLineLabel[index] = new javax.swing.JLabel();
00434         daqPanelForLabels[index].add(daqSelectLineLabel[index]);
00435             daqSelectLineLabel[index].setText("  Select Line  ");
00436             daqSelectLineChoices[index] = new javax.swing.JComboBox();
00437         daqPanelForLabels[index].add(daqSelectLineChoices[index]);
00438             daqSelectLineChoices[index].setModel(
00439                 new javax.swing.DefaultComboBoxModel(new String[] 
00440                 { "Normal + Redundant", "Normal", "Redundant" }));
00441 
00442         performDAQScanButton[index] = new javax.swing.JButton();
00443         daqPanelForLabels[index].add(performDAQScanButton[index]);
00444             performDAQScanButton[index].setText("Perform DAQ scan");
00445             performDAQScanButton[index].addActionListener(new java.awt.event.ActionListener() {
00446                 public void actionPerformed(java.awt.event.ActionEvent evt) {
00447                     //get the selected tab (ie selected harness number)
00448                     int selectedHarness = jTabbedPaneDAQData.getSelectedIndex();
00449                     //get the selected select line
00450                     String selectLine = 
00451                              (String)daqSelectLineChoices[selectedHarness].getSelectedItem();
00452                          //do the daq scan and fill the corresponding graphic table(s)
00453                          if(selectLine.equals("Normal"))
00454                              {
00455                                  changeSelect(0);
00456                                  daqHarnessTableModels_Select0[selectedHarness].
00457                                      newData(probeScanHarnessWithTrigger(selectedHarness, (short)0), 
00458                                              dataFile, getTimeStamp());//select line 0
00459                              }
00460                          else if(selectLine.equals("Redundant"))
00461                              {
00462                                  changeSelect(1);
00463                                  daqHarnessTableModels_Select1[selectedHarness].
00464                                      newData(probeScanHarnessWithTrigger(selectedHarness, (short)1), 
00465                                              dataFile, getTimeStamp());//select line 1
00466                              }
00467                          else if(selectLine.equals("Normal + Redundant"))
00468                              {
00469                                  changeSelect(0);
00470                                  daqHarnessTableModels_Select0[selectedHarness].
00471                                      newData(probeScanHarnessWithTrigger(selectedHarness, (short)0), 
00472                                              dataFile, getTimeStamp());//select line 0
00473 
00474                                  changeSelect(1);
00475                                  daqHarnessTableModels_Select1[selectedHarness].
00476                                      newData(probeScanHarnessWithTrigger(selectedHarness, (short)1), 
00477                                              dataFile, getTimeStamp());//select line 1
00478                              }
00479                      }
00480                  });
00481 
00482         daqHaernessPanels[index].setPreferredSize(new Dimension(850,550));
00483         //table1: for selectLine 0 (in a given harness)
00484         daqScrollPanelForTable_Select0[index] = new javax.swing.JScrollPane();
00485         daqHaernessPanels[index].add(daqScrollPanelForTable_Select0[index], java.awt.BorderLayout.CENTER);
00486           daqHarnessTable_Select0[index] = new javax.swing.JTable();
00487           daqScrollPanelForTable_Select0[index].setViewportView(daqHarnessTable_Select0[index]);
00488             daqHarnessTable_Select0[index].setFont(new java.awt.Font("Monospaced", 0, 12));
00489             //create the harness0 tables: they are  tow, one for select line 0 and for line 1
00490             daqHarnessTableModels_Select0[index] =  new SamplingDataTableModel(m_harnessList[index], 0);//selectLine=0
00491             daqHarnessTable_Select0[index].setModel(daqHarnessTableModels_Select0[index]);
00492             changeDAQTableCellsColor(daqHarnessTable_Select0[index]);
00493         //table2: for selectLine 1 (in a given harness)
00494         daqPanelForSecondTable[index] = new javax.swing.JPanel();
00495         daqHaernessPanels[index].add(daqPanelForSecondTable[index], java.awt.BorderLayout.SOUTH);
00496         daqPanelForSecondTable[index].setLayout(new java.awt.BorderLayout());
00497         daqPanelForSecondTable[index].setPreferredSize(new Dimension(550,250));
00498              daqScrollPanelForTable_Select1[index] = new javax.swing.JScrollPane();
00499              daqPanelForSecondTable[index].add(daqScrollPanelForTable_Select1[index], java.awt.BorderLayout.CENTER);
00500               daqHarnessTable_Select1[index] = new javax.swing.JTable();
00501               daqScrollPanelForTable_Select1[index].setViewportView(daqHarnessTable_Select1[index]);
00502                   daqHarnessTable_Select1[index].setFont(new java.awt.Font("Monospaced", 0, 12));
00503                   //TODO: Implement Select Line
00504                   daqHarnessTableModels_Select1[index] =  new SamplingDataTableModel(m_harnessList[index], 1);//selectLine=1
00505                   daqHarnessTable_Select1[index].setModel(daqHarnessTableModels_Select1[index]);
00506                   changeDAQTableCellsColor(daqHarnessTable_Select1[index]);
00507     }//end of for(int index=0....)
00508 //==================================== DCS Data tab ========================================
00509  jTabbedPaneTest.addTab("DCS Data", jTabbedPaneDCSData);
00510  //remove all the tabs (to put others)
00511  jTabbedPaneDCSData.removeAll();
00512 
00513  dcsHarnessPanels = new javax.swing.JPanel[harnessMax];
00514  dscScrollPanelForTable_Select0 = new javax.swing.JScrollPane[harnessMax];
00515  dcsHarnessTable_Select0 = new javax.swing.JTable[harnessMax];
00516  dcsHarnessTableModels_Select0 =  new DCSDataTableModel[harnessMax];
00517  dcsPanelForSecondTable = new javax.swing.JPanel[harnessMax];
00518  dscScrollPanelForTable_Select1 = new javax.swing.JScrollPane[harnessMax];
00519  dcsHarnessTable_Select1 = new javax.swing.JTable[harnessMax];
00520  dcsHarnessTableModels_Select1 =  new DCSDataTableModel[harnessMax];
00521  dcsPanelForLabels = new javax.swing.JPanel[harnessMax];
00522  stateTransitionLabel = new javax.swing.JLabel[harnessMax];
00523  transitionStateChoices = new javax.swing.JComboBox[harnessMax];
00524  changePSStateButton = new javax.swing.JButton[harnessMax];
00525  dcsSelectLineLabel = new javax.swing.JLabel[harnessMax];
00526  dcsSelectLineChoices = new javax.swing.JComboBox[harnessMax];
00527  performDCSScanButton = new javax.swing.JButton[harnessMax];
00528 
00529 for(int index=0; index<harnessMax; index++)
00530     {
00531       dcsHarnessPanels[index] = new javax.swing.JPanel();
00532       jTabbedPaneDCSData.addTab("Harness "+ m_harnessList[index], dcsHarnessPanels[index] );
00533          dcsHarnessPanels[index].setLayout(new java.awt.BorderLayout());
00534          dcsHarnessPanels[index].setPreferredSize(new Dimension(350,550));
00535          dcsHarnessPanels[index].setPreferredSize(new Dimension(250,350));
00536          //Select Line 0
00537          dscScrollPanelForTable_Select0[index] = new javax.swing.JScrollPane();
00538          dcsHarnessPanels[index].add(dscScrollPanelForTable_Select0[index], java.awt.BorderLayout.CENTER);
00539          dcsHarnessTable_Select0[index] = new javax.swing.JTable();
00540             dscScrollPanelForTable_Select0[index].setViewportView(dcsHarnessTable_Select0[index]);
00541                dcsHarnessTable_Select0[index].setFont(new java.awt.Font("Monospaced", 0, 12));
00542                dcsHarnessTableModels_Select0[index] =  new DCSDataTableModel(m_harnessList[index], 0);//selectLine=0
00543                dcsHarnessTable_Select0[index].setModel(dcsHarnessTableModels_Select0[index]);
00544                changeDCSTableCellsColor(dcsHarnessTable_Select0[index]);
00545          //Select Line 1
00546          dcsPanelForSecondTable[index] = new javax.swing.JPanel();
00547          dcsHarnessPanels[index].add(dcsPanelForSecondTable[index], java.awt.BorderLayout.SOUTH);
00548             dcsPanelForSecondTable[index].setLayout(new java.awt.BorderLayout());
00549             dcsPanelForSecondTable[index].setPreferredSize(new Dimension(350,250));
00550             dscScrollPanelForTable_Select1[index] = new javax.swing.JScrollPane();
00551             dcsPanelForSecondTable[index].add(dscScrollPanelForTable_Select1[index], 
00552                                               java.awt.BorderLayout.CENTER);
00553             dcsHarnessTable_Select1[index] = new javax.swing.JTable();
00554                dscScrollPanelForTable_Select1[index].setViewportView(dcsHarnessTable_Select1[index]);
00555                   dcsHarnessTable_Select1[index].setFont(new java.awt.Font("Monospaced", 0, 12));
00556                   dcsHarnessTableModels_Select1[index] =  new DCSDataTableModel(m_harnessList[index], 1);//selectLine=0
00557                   dcsHarnessTable_Select1[index].setModel(dcsHarnessTableModels_Select1[index]);
00558                   changeDCSTableCellsColor(dcsHarnessTable_Select1[index]);
00559          dcsPanelForLabels[index] = new javax.swing.JPanel();
00560          dcsHarnessPanels[index].add(dcsPanelForLabels[index], java.awt.BorderLayout.NORTH);
00561             dcsPanelForLabels[index].setLayout(new javax.swing.BoxLayout(dcsPanelForLabels[index], 
00562                                                                          javax.swing.BoxLayout.X_AXIS));
00563             stateTransitionLabel[index] = new javax.swing.JLabel();
00564             dcsPanelForLabels[index].add(stateTransitionLabel[index]);
00565                stateTransitionLabel[index].setText("  Select PS State  ");
00566                transitionStateChoices[index] = new javax.swing.JComboBox();
00567             dcsPanelForLabels[index].add(transitionStateChoices[index]);
00568                transitionStateChoices[index].setModel(
00569                    new javax.swing.DefaultComboBoxModel(new String[] { "STANDBY", "ON", "OFF" }));
00570             changePSStateButton[index] = new javax.swing.JButton();
00571             dcsPanelForLabels[index].add(changePSStateButton[index]);
00572                changePSStateButton[index].setText("Change STATE");
00573                changePSStateButton[index].addActionListener(
00574                    new java.awt.event.ActionListener() 
00575                        {
00576                            public void actionPerformed(java.awt.event.ActionEvent evt) 
00577                               {
00578                                   //get the selected tab (ie selected harness number)
00579                                   int selectedHarness = jTabbedPaneDCSData.getSelectedIndex();
00580                                   //get the selected select line
00581                                   String state = 
00582                                       (String)transitionStateChoices[selectedHarness].getSelectedItem();
00583                                   short stateNumber = 0;
00584                                   if(state.equals("ON")) {
00585                                       stateNumber = 1;
00586                                   } else if(state.equals("OFF")) {
00587                                       stateNumber = 0;
00588                                   } else if(state.equals("STANDBY")) {
00589                                       stateNumber = 2;
00590                                   }
00591                                   //set the PS to the required state
00592                                   changePSState(selectedHarness, stateNumber);
00593                               }
00594                        });
00595             dcsSelectLineLabel[index] = new javax.swing.JLabel();
00596             dcsPanelForLabels[index].add(dcsSelectLineLabel[index]);
00597                dcsSelectLineLabel[index].setText("  Select Line  ");
00598                dcsSelectLineChoices[index] = new javax.swing.JComboBox();
00599             dcsPanelForLabels[index].add(dcsSelectLineChoices[index]);
00600                dcsSelectLineChoices[index].setModel(new javax.swing.DefaultComboBoxModel(
00601                              new String[] { "Normal + Redundant",  "Normal", "Redundant" }));
00602 
00603             performDCSScanButton[index] = new javax.swing.JButton();
00604             dcsPanelForLabels[index].add(performDCSScanButton[index]);
00605                performDCSScanButton[index].setText("Perform DCS scan");
00606                performDCSScanButton[index].addActionListener(
00607                    new java.awt.event.ActionListener() 
00608                        {
00609                            public void actionPerformed(java.awt.event.ActionEvent evt) 
00610                               {
00611                                   //get the selected tab (ie selected harness number)
00612                                   int selectedHarness = jTabbedPaneDCSData.getSelectedIndex();
00613                                   //get the selected select line
00614                                   String selectLine = 
00615                                       (String)dcsSelectLineChoices[selectedHarness].getSelectedItem();
00616                                   //read DCS data and fill the corresponding graphic table(s)
00617                                   if(selectLine.equals("Normal"))
00618                                       {
00619                                           changeSelect(0);
00620                                           dcsHarnessTableModels_Select0[selectedHarness].
00621                                               newData(readDCSData(selectedHarness, (short)0), 
00622                                                       dataFile, getTimeStamp());//select line 0
00623                                       }
00624                                   else if(selectLine.equals("Redundant"))
00625                                       {
00626                                           changeSelect(1);
00627                                           dcsHarnessTableModels_Select1[selectedHarness].
00628                                               newData(readDCSData(selectedHarness, (short)1), 
00629                                                       dataFile, getTimeStamp());//select line 1
00630                                       }
00631                                   else if(selectLine.equals("Normal + Redundant"))
00632                                       {
00633                                           changeSelect(0);
00634                                           dcsHarnessTableModels_Select0[selectedHarness].
00635                                               newData(readDCSData(selectedHarness, (short)0), 
00636                                                       dataFile, getTimeStamp());//select line 0
00637 
00638                                           changeSelect(1);
00639                                           dcsHarnessTableModels_Select1[selectedHarness].
00640                                               newData(readDCSData(selectedHarness, (short)1), 
00641                                                       dataFile, getTimeStamp());//select line 1
00642                                           //must be called after the two table has been filled 
00643                                           daqDcsAnalyse(selectedHarness);
00644                                       }
00645                               }
00646                        });
00647     }//end of for(int index=0....)
00648 }//end of  createTabs()
00649 
00650 //
00651 // Here are the methods that perform and analyse the tests
00652 //
00653 
00654 private String[][] probeScanHarnessWithTrigger(int selectedHarness, short selectLine) 
00655 {
00656     if(api == null){ // protection against case where DAQ not running
00657         System.out.println("Error: api pointer is NULL");
00658         return m_daq_scanResultsTable;
00659     }
00660 
00661     Sct_SctApi.Scan probeScan = api.createScan();
00662     probeScan.getTrigger1().doubleL1A((short)10);
00663     probeScan.configure((short)20, 0.0, 24.0, 1.0);
00664 
00665     try {
00666         m_daq_scanResults = api.probeScanHarnessWithTrigger(m_partition, m_crate, m_rod,
00667                                                         probeScan, m_harnessList[selectedHarness]);
00668     } 
00669     catch(NumberFormatException e) {
00670         javax.swing.JOptionPane.showMessageDialog(null, "Failed to interpet harness value");
00671     }
00672 
00673     // Analyse the results
00674     harnessDAQTestAnalyse(selectedHarness, selectLine);
00675 
00676     // Return the result table
00677     return m_daq_scanResultsTable;
00678 
00679 }//end of String[][] probeScanHarnessWithTrigger
00680 
00681 private void changePSState(int selectedHarness, short stateNumber) {
00682 
00683     // Set PS to the required state:
00684     //  0 = "OFF"
00685     //  1 - "ON"
00686     //  2 = "STANDBY"
00687 
00688     if(apiDDC == null){ // protection against case where DAQ not running
00689         System.out.println("Error: apiDDC pointer is NULL");
00690         return;
00691     }
00692 
00693     for(int dogleg=0; dogleg<=5; dogleg++) {
00694        System.out.println("Requesting PS state change: " + getPSCrate().value + " " + 
00695            getPSChannel(selectedHarness, dogleg).value + " " + stateNumber);    
00696        apiDDC.ddcChangeState(getPSCrate().value, getPSChannel(selectedHarness, dogleg).value, stateNumber);
00697     }
00698 }//end of void changePSState
00699 
00700 private void changeSelect(int selection) {
00701 
00702     //change select line in DCS
00703     //convert int to boolean
00704 
00705     boolean select;
00706     if(selection == 1) select = true;
00707     else select = false;
00708 
00709     if(apiDDC == null){ // protection against case where DAQ not running
00710         System.out.println("Error: apiDDC pointer is NULL");
00711         return;
00712     }
00713 
00714     if(selection == m_select){
00715       System.out.println("changeSelect: select already set to " + selection + ". No action taken.");
00716       return;
00717     }
00718 
00719     short oldTimeout = apiDDC.ddcGetMultipleTimeout();
00720     short newTimeout = 60;
00721     apiDDC.ddcSetMultipleTimeout(newTimeout);
00722 
00723     System.out.println("changeSelect: Requesting Select " + selection + " Timeout " + newTimeout);
00724     apiDDC.setSelectAllInCrate(getPSCrate().value, select);
00725 
00726     apiDDC.ddcSetMultipleTimeout(oldTimeout);
00727 
00728     m_select = selection;
00729 
00730 }//end of void changeSelect
00731 
00732 private String[][] readDCSData(int selectedHarness, short selectLine) {  
00733 
00734     // Read DCS values for the selected harness
00735     // Values are stored in the table selected by selectLine.
00736     // The select line must have been set externally.
00737  
00738     if(apiDDC == null){ // protection against case where DAQ not running
00739         System.out.println("Error: apiDDC pointer is NULL");
00740         return m_dcs_scanResultsTable;
00741     }
00742 
00743     for(int dogleg=0; dogleg<=5; dogleg++){
00744         System.out.println("DOGLEG N = " + dogleg);
00745 
00746         for( int parameter=0; parameter<psChannelParametersList.length; parameter++){
00747 
00748             System.out.println("  Parameter: " + psChannelParametersList[parameter] + " channel " + 
00749                               getPSChannel(selectedHarness,dogleg).value);
00750             m_dcs_scanResults[parameter][dogleg] =
00751                  apiDDC.ddcGetChannelParameterFloat(getPSCrate().value, getPSChannel(selectedHarness, dogleg).value, 
00752                               psChannelParametersList[parameter]);
00753             System.out.println("  ParameterValue = " + m_dcs_scanResults[parameter][dogleg]);
00754         }
00755     }
00756     // Analyse the results
00757     harnessDCSTestAnalyse(selectedHarness, selectLine);
00758 
00759     // Return the result table
00760     return m_dcs_scanResultsTable;
00761 }//end of readDCSData
00762 
00763 private void doTestsForAllHarnesses() {
00764 
00765     // Changing SELECT is slow so we do it outside the harness loop
00766 
00767     changeSelect(0);
00768         
00769     for(int harness=0; harness<m_harnessMax; harness++) {
00770 
00771         daqHarnessTableModels_Select0[harness].newData(probeScanHarnessWithTrigger(harness, (short)0), 
00772                            dataFile, getTimeStamp());
00773         dcsHarnessTableModels_Select0[harness].newData(readDCSData(harness, (short)0), 
00774                            dataFile, getTimeStamp());
00775         //update the summary tables
00776         summaryHarnessTableModels[harness].newData(m_summary_scanResults[harness], 
00777                            dataFile, getTimeStamp());
00778     }
00779 
00780     changeSelect(1);
00781         
00782     for(int harness=0; harness<m_harnessMax; harness++) {
00783 
00784         daqHarnessTableModels_Select1[harness].newData(probeScanHarnessWithTrigger(harness, (short)1), 
00785                            dataFile, getTimeStamp());
00786 
00787         //Next two lines commented on 16-9-2004 by A.A. and A.T. to speed up tests
00788         //dcsHarnessTableModels_Select1[harness].newData(readDCSData(harness, (short)1), 
00789         //                 dataFile, getTimeStamp());
00790 
00791         //update the summary tables
00792         summaryHarnessTableModels[harness].newData(m_summary_scanResults[harness], 
00793                            dataFile, getTimeStamp());
00794         //should be called after the two table has been filled 
00795         //Next line commented on 16-9-2004 by A.A. and A.T. to speed up tests
00796         //daqDcsAnalyse(harness);
00797     }
00798 
00799     //Save summary data to File
00800     // saveHarnessDataToFile();
00801 
00802 }// end of doTestsForAllHarnesses
00803 
00804 public void harnessDAQTestAnalyse(int selectedHarness, short selectLine)
00805 {
00806     //get the summary table (to be updated)
00807     m_summary_scanResults[selectedHarness] = summaryHarnessTableModels[selectedHarness].getData();
00808 
00809     int clk;
00810 
00811     for(int link=0; link<12; link++) {
00812         int numberL=0;
00813         int number1=0;
00814         int number2=0;
00815         int numberE=0;
00816         int numberJunk=0;
00817         int number0=0;
00818         int numberUnidentified=0;
00819 
00820         for(clk=0; clk<24; clk++) {
00821                     
00822             char linkResult = (char)m_daq_scanResults[clk][link];
00823 
00824             if((linkResult == 'L') || (linkResult == 'l')) numberL++;
00825             else if(linkResult == '1') number1++;
00826             else if(linkResult == '2') number2++;
00827             else if(linkResult == 'E') numberE++;
00828             else if(linkResult == 'J') numberJunk++;
00829             else if(linkResult == '0') number0++;
00830             else numberUnidentified++;
00831 
00832             // Fill the result table
00833             m_daq_scanResultsTable[clk][link]  = "" + linkResult;
00834         }
00835 
00836         // Generate a summary comment for the last column
00837         // modified AJB 12/2/05 to allow a bit more junk before JUNKing
00838         if(number0 >= 22) m_daq_scanResultsTable[clk][link] = "Dead";
00839         else if(number1 >= 22) m_daq_scanResultsTable[clk][link] = "Stuck";
00840         else if(number1+number0>=18 && number0<=14) m_daq_scanResultsTable[clk][link] = "CLK";
00841         else if(number2 >= 18) m_daq_scanResultsTable[clk][link] = "Clock by 2";
00842         else if(numberE >= 18) m_daq_scanResultsTable[clk][link] = "Event";
00843         else if(numberL >= 18) m_daq_scanResultsTable[clk][link] = "L1A";                   
00844         else m_daq_scanResultsTable[clk][link] = "Junk";          
00845     }
00846 
00847     // Analyse the state of the two links of each dogleg
00848     //  - set PASS only if both links returned the correct data
00849 
00850     for(int dogleg=0; dogleg<6; dogleg++) {
00851         String link0Result = m_daq_scanResultsTable[24][(dogleg*2)];
00852         String link1Result = m_daq_scanResultsTable[24][(dogleg*2)+1];
00853 
00854         String linksState = "FAIL";
00855         if(selectLine == 1){
00856           // correct state has CLK on link0 and L1A on link1
00857           if     (link0Result == "CLK"  &&  link1Result == "L1A") linksState = "PASS";
00858           else if(link0Result == "L1A"  &&  link1Result == "CLK") linksState = "SWAP";
00859         }else{
00860           // correct state has L1A on link0 and CLK on link1
00861           if     (link0Result == "L1A"  &&  link1Result == "CLK") linksState = "PASS";
00862           else if(link0Result == "CLK"  &&  link1Result == "L1A") linksState = "SWAP";
00863         }
00864 
00865         if( link0Result == "Dead" &&  link1Result == "Dead") linksState = "Both Dead";
00866         else if( link0Result == "Dead") linksState = "Link0 Dead";
00867         else if( link1Result == "Dead") linksState = "Link1 Dead";
00868 
00869         if( link0Result == "Stuck" &&  link1Result == "Stuck") linksState = "Both Stuck";
00870         else if( link0Result == "Stuck") linksState = "Link0 Stuck";
00871         else if( link1Result == "Stuck") linksState = "Link1 Stuck";
00872 
00873         m_summary_scanResults[selectedHarness][selectLine][dogleg] = linksState;
00874     }
00875 
00876     //update the summary table
00877     summaryHarnessTableModels[selectedHarness].newData(m_summary_scanResults[selectedHarness], 
00878                                                        dataFile, getTimeStamp());
00879 }//end harnessDAQTestAnalyse
00880 
00881 public void harnessDCSTestAnalyse(int selectedHarness, short selectLine)
00882 {
00883     //get the summary table (to be upadated)
00884     m_summary_scanResults[selectedHarness] = summaryHarnessTableModels[selectedHarness].getData();
00885 
00886     for(int dogleg=0; dogleg<6; dogleg++) {
00887         // If any parameter is outside tolerance, report FAIL
00888         // If LV has tripped, report TRIP
00889         // - otherwise report PASS
00890         String  parametersState = "PASS";
00891 
00892         for(int parameter=0; parameter<psChannelParametersList.length; parameter++) {
00893             float thisParameterLowerLimit = psChannelParametersLimits[parameter][0];
00894             float thisParameterUpperLimit = psChannelParametersLimits[parameter][1];
00895                    
00896             if(m_dcs_scanResults[parameter][dogleg]<thisParameterLowerLimit ||
00897                m_dcs_scanResults[parameter][dogleg]>thisParameterUpperLimit) {
00898                 parametersState="FAIL";
00899             }
00900 
00901             // fill the (selectecHarness, selectLine) table
00902             if(parameter==0){
00903                 m_dcs_scanResultsTable[parameter][dogleg] = "0x" + Integer.toHexString((int)m_dcs_scanResults[parameter][dogleg]);
00904             }else{
00905                 m_dcs_scanResultsTable[parameter][dogleg] = "" + m_dcs_scanResults[parameter][dogleg];
00906             }
00907         }
00908 
00909         int status = (int) m_dcs_scanResults[0][dogleg];
00910         if((status&0x20)==0x20){
00911             parametersState="TRIP";
00912         }
00913 
00914         // Fill the overall PASS/FAIL status
00915         m_dcs_scanResultsTable[psChannelParametersList.length][dogleg] = parametersState;
00916 
00917         //update the corresponding column in the harness summary table in the "Test" panel
00918         //we add 2 below, because we want to fill the third and fourth columns
00919         m_summary_scanResults[selectedHarness][selectLine+2][dogleg] = parametersState;
00920     }
00921 
00922     //update the summary table
00923     summaryHarnessTableModels[selectedHarness].newData(m_summary_scanResults[selectedHarness], 
00924                                                        dataFile, getTimeStamp());
00925 }//end of harnessDCSTestAnalyse
00926 
00927 public void daqDcsAnalyse(int selectedHarness) {
00928     //get the summary table (to be updated)
00929     m_summary_scanResults[selectedHarness] = summaryHarnessTableModels[selectedHarness].getData();
00930 
00931     //compare the DCS scan results for the two select lines for the actual harness
00932     String[][] select0_table = dcsHarnessTableModels_Select0[selectedHarness].getData();
00933     String[][] select1_table = dcsHarnessTableModels_Select1[selectedHarness].getData();
00934 
00935     if(select0_table==null ||  select0_table==null) {
00936         System.out.println("pointer select0_table or select1_table is null. this means one select line table is empty");
00937         return;
00938     }
00939  
00940     //compare the DCS data for the two selects line (in a harness). both select lines should have the 
00941     //same data.
00942     //remember that row column table are not as [row][column] but the way round [column][row]!!!
00943     for(int row=0; row<select0_table[0].length; row++) {
00944         String compareParameterValue =  "";
00945         for(int column=1; column<select0_table.length-1; column++){ // temporary fix for LvchStat
00946             float value1= Float.parseFloat(select0_table[column][row]);
00947             float value2= Float.parseFloat(select1_table[column][row]);
00948             float valuesComparison = 0;
00949 
00950             if(value2 != 0) 
00951                 valuesComparison = value1/value2;
00952             else if(value1<-0.05 || value1>0.05)// value2 is 0, then value1 should be also 0 (to 5%)
00953                 valuesComparison = 0; //this means, of course, "FAIL";
00954             else 
00955                 valuesComparison = 1; //this means "PASS";
00956             
00957             if(valuesComparison>1.05 || valuesComparison<0.95)
00958                 compareParameterValue = "FAIL";
00959             else
00960                 compareParameterValue = "PASS";
00961         }
00962 
00963         //fill the "DCS S0vsS1" column (this is the fifth column)
00964         //if(compareParameterValue != "PASS" || select0_table[column][row] != "PASS") //enough to test one slect table
00965         if(compareParameterValue != "PASS" ) //enough to test one slect table
00966             m_summary_scanResults[selectedHarness][4][row] = "FAIL";
00967         else 
00968             m_summary_scanResults[selectedHarness][4][row] = "PASS"; 
00969     }
00970 
00971     //Overall PASS/FAIL status (last column of the summary table) 
00972 
00973     for(int row=0; row<6; row++) {
00974         String daq_dcs_result = "PASS";
00975         for(int column=0; column<5; column++) {
00976             if(m_summary_scanResults[selectedHarness][column][row] != "PASS"){
00977                 daq_dcs_result = "FAIL";
00978             }
00979         }
00980         m_summary_scanResults[selectedHarness][5][row] = daq_dcs_result; 
00981     }
00982 
00983     //update the summary table
00984     summaryHarnessTableModels[selectedHarness].newData(m_summary_scanResults[selectedHarness], 
00985                                                        dataFile, getTimeStamp());
00986 }//end of daqDcsAnalyse
00987 
00988 private void closeButtonPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonPerformed
00989     ((Window)getTopLevelAncestor()).dispose();
00990 }//GEN-LAST:event_closeButtonPerformed
00991 
00992 public org.omg.CORBA.IntHolder  getPSPartition() {return ps_partition;}
00993 
00994 public org.omg.CORBA.IntHolder getPSCrate() {return ps_crate;}
00995 
00996 public org.omg.CORBA.IntHolder getPSChannel(int selectedHarness, int dogleg) {return ps_channel[selectedHarness][dogleg];}
00997 
00998 //here are the tables models: we need, at most, three models. one for sampling test (DAQ Data tab), one for DCS test
00999 //(DCS Data tab) and one as a summary tet (Test tab)
01000 //1) this is the sampling model it's a 12X24 table
01001 
01002 //
01003 // Table model for DAQ data table
01004 //
01005 
01006 class SamplingDataTableModel extends javax.swing.table.AbstractTableModel 
01007 {
01008     //private variables
01009     int m_harness;
01010     int m_selectLine;
01011     String[][] m_harnessSamplingData;
01012     
01013     // default constructor
01014     public SamplingDataTableModel(int harness, int selectLine) {
01015         m_harness = m_harness;
01016         m_selectLine = selectLine;
01017         m_harnessSamplingData = new String[25][12];
01018         for(int column=0; column< (getColumnCount()-1); column++){
01019             for(int row=0; row< getRowCount(); row++){
01020                 m_harnessSamplingData[column][row] = "?";
01021             }
01022         }
01023     }
01024 
01025     public Class getColumnClass(int column) {
01026         return getValueAt(0, column).getClass();
01027     }
01028 
01029     public void newData(String[][] harnessSamplingData, String dataFile, String timeStamp) {
01030         for(int column=0; column< (getColumnCount()-1); column++){
01031             for(int row=0; row< getRowCount(); row++){
01032                 m_harnessSamplingData[column][row] = harnessSamplingData[column][row];
01033             }
01034         }
01035         fireTableStructureChanged();
01036         saveDataToFile(dataFile, timeStamp);
01037     }
01038 
01039     public String[][] getData() {
01040         return m_harnessSamplingData;
01041     }
01042 
01043     public int getColumnCount() {
01044         return (1+m_harnessSamplingData.length);
01045     }
01046     
01047     public int getRowCount() {
01048         return m_harnessSamplingData[0].length; 
01049     }
01050     
01051     public Object getValueAt(int rowIndex, int columnIndex) {                
01052         if(columnIndex == 0) 
01053             return "Ln" + rowIndex;
01054         else 
01055             return "" + m_harnessSamplingData[columnIndex-1][rowIndex];
01056     }
01057         
01058     public String getColumnName(int columnIndex) {
01059         String retValue;
01060         
01061         if(columnIndex == 0) {
01062             retValue = "Select"+m_selectLine;
01063         } else if(columnIndex == 25) {
01064             retValue ="P/F";
01065         } else {
01066             columnIndex--;
01067             retValue = "" + columnIndex;
01068         }
01069 
01070         return retValue;
01071     }
01072 
01073     public void saveDataToFile(String dataFile, String timeStamp) {
01074         java.io.File dataFile_withpath = new File(dataFile);
01075         
01076         try
01077             {
01078                 //dataFile = "$SCT_DAQ_ROOT/saved_data/" + dataFile;            
01079                 BufferedWriter out = new BufferedWriter(new FileWriter(dataFile_withpath, true));
01080                 
01081                 out.write("---- DAQ Data for harness "+m_harness+ " Select Line "+m_selectLine);
01082                 out.newLine();
01083                 out.write(timeStamp);
01084                 out.write("   Rx Threshold = " + m_rxThreshold);
01085                 out.newLine();
01086                 out.newLine();
01087                 //print column titles
01088                 out.write(getColumnName(0) + " ");//only one space here
01089                 for (int column =1; column<m_harnessSamplingData.length; column++)
01090                     if(column<10) out.write(getColumnName(column) + "  ");//two space here (for allignement!)
01091                     else  out.write(getColumnName(column) + " ");//one space here 
01092                 out.newLine();
01093                 out.newLine();
01094                 //print the tables entries
01095                 for (int row =0; row<m_harnessSamplingData[0].length; row++) 
01096                     {           
01097                         if(row<10) out.write("Link" + row+"   ");
01098                         else out.write("Link" + row+"  ");//remove one blanc for allignement
01099                         for(int column=0; column<m_harnessSamplingData.length; column++)
01100                             out.write(m_harnessSamplingData[column][row]+"  ");
01101                         out.newLine();
01102                     }
01103                 //space before the next writing in this file
01104                 out.newLine();
01105                 out.newLine();
01106                 out.close();  
01107             }
01108         catch(IOException e) 
01109             {
01110                 javax.swing.JOptionPane.showMessageDialog(null, "Failed to Open File = " + dataFile_withpath.getAbsolutePath());
01111             }
01112     }
01113 }//end of  class SamplingDataTableModel extends javax.swing.table.AbstractTableModel 
01114 
01115 //
01116 // Table model for DCS data table
01117 //
01118 
01119 class DCSDataTableModel extends javax.swing.table.AbstractTableModel 
01120 {
01121     //private variables
01122     int m_harness;
01123     int m_selectLine;
01124     String[][] m_harnessDCSData;
01125 
01126     // default constructor
01127     public DCSDataTableModel(int harness, int selectLine) {
01128         m_harness = harness;
01129         m_selectLine = selectLine;
01130         m_harnessDCSData = new String[psChannelParametersList.length+1][maxDoglegNumberInHarness];
01131         for(int column=0; column< (getColumnCount()-1); column++){
01132             for(int row=0; row< getRowCount(); row++){
01133                 m_harnessDCSData[column][row] = "?";
01134             }
01135         }
01136     }
01137     
01138     public void newData(String[][] harnessDCSData, String dataFile, String timeStamp) {
01139         for(int column=0; column< (getColumnCount()-1); column++){
01140             for(int row=0; row< getRowCount(); row++){
01141                 m_harnessDCSData[column][row] = harnessDCSData[column][row];
01142             }
01143         }
01144         fireTableStructureChanged();
01145         saveDataToFile(dataFile, timeStamp);
01146     } 
01147 
01148     public Class getColumnClass(int column) {
01149         return getValueAt(0, column).getClass();
01150     }
01151 
01152     public String[][] getData() {
01153         return m_harnessDCSData;
01154     }
01155     
01156     public int getColumnCount() {
01157         return (1+m_harnessDCSData.length);
01158     }
01159     
01160     public int getRowCount() {
01161         return m_harnessDCSData[0].length;
01162     }
01163     
01164     public Object getValueAt(int rowIndex, int columnIndex) {
01165         if(columnIndex == 0) 
01166             return "Dogleg " + (rowIndex+1);
01167         else 
01168             return "" + m_harnessDCSData[columnIndex-1][rowIndex];
01169     }
01170     
01171     public String getColumnName(int columnIndex) {
01172         String retValue;
01173 
01174         if(columnIndex == 0) 
01175             retValue = "Select"+m_selectLine;
01176         else if(columnIndex == psChannelParametersList_short.length+1) 
01177             retValue = "P/F";
01178         else 
01179             retValue = "" + psChannelParametersList_short[columnIndex-1];
01180         
01181         return retValue;
01182     }
01183 
01184     public void saveDataToFile(String dataFile, String timeStamp) {     
01185         java.io.File dataFile_withpath = new File(dataFile);
01186 
01187         try
01188             {
01189                 //dataFile = "$SCT_DAQ_ROOT/saved_data/" + dataFile;
01190                 
01191                 BufferedWriter out = new BufferedWriter(new FileWriter(dataFile_withpath, true));
01192                 
01193                 out.write("---- DCS Data for harness "+m_harness+ " Select Line "+m_selectLine);
01194                 out.newLine();
01195                 out.write(timeStamp);
01196                 out.newLine();
01197                 out.newLine();
01198                 //print column titles
01199                 out.write(getColumnName(0)+" ");//don't the first name (Select..)
01200                 for (int column =1; column<m_harnessDCSData.length; column++) 
01201                     out.write(getColumnName(column) + " ");//one space here 
01202                 out.newLine();
01203                 out.newLine();
01204                 //print the tables entries
01205                 for (int row =0; row<m_harnessDCSData[0].length; row++) 
01206                     {           
01207                         out.write("Dogleg" + (row+1) +"   ");
01208                         for(int column=0; column<m_harnessDCSData.length; column++)
01209                             out.write(m_harnessDCSData[column][row]+"  ");
01210                         out.newLine();
01211                     }
01212                 //space before the next writing in this file
01213                 out.newLine();
01214                 out.newLine();
01215                 out.close();  
01216             }
01217         catch(IOException e) 
01218             {
01219                 javax.swing.JOptionPane.showMessageDialog(null, "Failed to Open File:" + dataFile_withpath.getAbsolutePath());
01220             }
01221     }
01222 }
01223    
01224 //
01225 // Table model for Summary data table
01226 //
01227 
01228 class HarnessTestsSummaryTableModel extends javax.swing.table.AbstractTableModel 
01229 {
01230     String[][] m_HarnessTestsSummaryData;
01231     String[] m_columnsNames;
01232 
01233     int m_harness;
01234 
01235     public HarnessTestsSummaryTableModel(int harness, String[] columsNames) {
01236         m_harness = harness;
01237         m_columnsNames = columsNames;
01238     }
01239 
01240     public void newData(String[][] harnessTestsSummaryData) {
01241         m_HarnessTestsSummaryData = harnessTestsSummaryData;
01242         fireTableStructureChanged();
01243     }
01244 
01245     public void newData(String[][] harnessTestsSummaryData, String dataFile, String timeStamp) {
01246         m_HarnessTestsSummaryData = harnessTestsSummaryData;
01247         fireTableStructureChanged();
01248         saveDataToFile(dataFile, timeStamp);
01249     }
01250 
01251     public Class getColumnClass(int column) {
01252         return getValueAt(0, column).getClass();
01253     }
01254 
01255     public String[][] getData() {
01256         return m_HarnessTestsSummaryData ;
01257     }
01258     
01259     public int getColumnCount() { return 7; }
01260     
01261     public int getRowCount() { return 6; }
01262     
01263     public Object getValueAt(int rowIndex, int columnIndex) 
01264     {
01265         String retValue = "UNKNOWN";
01266         if(m_HarnessTestsSummaryData == null) return "Ptr Null";
01267         else
01268             {
01269                 if(columnIndex == 0) 
01270                     retValue = "Dogleg " + (rowIndex+1);
01271                 else 
01272                     retValue = ""+ m_HarnessTestsSummaryData[columnIndex-1][rowIndex];
01273             }
01274         return retValue;  
01275     }
01276     
01277     public String getColumnName(int columnIndex) 
01278     {
01279         return m_columnsNames[columnIndex];
01280     }
01281     public void saveDataToFile(String dataFile, String timeStamp) 
01282     {
01283         java.io.File dataFile_withpath = new File(dataFile);
01284 
01285         try
01286             {
01287                 //dataFile = "$SCT_DAQ_ROOT/saved_data/" + dataFile;
01288                 
01289                 BufferedWriter out = new BufferedWriter(new FileWriter(dataFile_withpath, true));               
01290                 out.write("---- DAQ-DCS Data Summary for harness "+m_harness);
01291                 out.newLine();
01292                 out.write(timeStamp);
01293                 out.write("   Rx Threshold = " + m_rxThreshold);
01294                 out.newLine();
01295                 out.newLine();
01296 
01297                 //print column titles
01298                 for (int column =0; column<m_HarnessTestsSummaryData.length; column++) 
01299                     out.write(getColumnName(column) + " ");//one space here 
01300                 out.newLine();
01301                 out.newLine();
01302                 //print the tables entries
01303                 for (int row =0; row<m_HarnessTestsSummaryData[0].length; row++) 
01304                     {           
01305                         out.write("Dogleg" + (row+1)+"   ");
01306                         for(int column=0; column<m_HarnessTestsSummaryData.length; column++)
01307                             out.write(m_HarnessTestsSummaryData[column][row]+"  ");
01308                         out.newLine();
01309                     }
01310                 //space before the next writing in this file
01311                 out.newLine();
01312                 out.newLine();
01313                 out.close();  
01314             }
01315         catch(IOException e) 
01316             {
01317                 javax.swing.JOptionPane.showMessageDialog(null, "Failed to Open File " + dataFile_withpath.getAbsolutePath());
01318             }
01319     }
01320 }
01321 
01322 public String getTimeStamp() 
01323 {
01324     // Apparently java.util.Date is deprecated so we should use the Calendar methods instead
01325     //   but why produce day like 8/7/104 instead of 8/7/2004?
01326 //     java.util.Calendar now = java.util.Calendar.getInstance();
01327 //     String timestamp =  Integer.toString(now.get(java.util.Calendar.DAY_OF_MONTH)) +
01328 //         "/" + Integer.toString(now.get(java.util.Calendar.MONTH)) +
01329 //         "/" + Integer.toString(now.get(java.util.Calendar.YEAR) - 1900) +
01330 //         "   " + Integer.toString(now.get(java.util.Calendar.HOUR)) +
01331 //         ":" + Integer.toString(now.get(java.util.Calendar.MINUTE)) +
01332 //         ":" + Integer.toString(now.get(java.util.Calendar.SECOND));
01333 
01334 //     return timestamp;
01335 
01336     java.util.Date date = new java.util.Date();
01337     
01338     String timestamp = date.getDate()+"/"+ date.getMonth() +"/"+ date.getYear() + "   "+
01339         date.getHours()+":"+ date.getMinutes()+":"+date.getSeconds();
01340     return timestamp;
01341 }
01342 
01343 
01344 
01345 //
01346 // Methods to set the colour of cells in the DCS table
01347 //
01348 
01349 public void changeDCSTableCellsColor(JTable table)
01350 {
01351     TableCellRenderer   cellRenderer = new DCSTableCellRenderer();
01352     try {
01353         table.setDefaultRenderer(Class.forName("java.lang.String"), cellRenderer);
01354     }
01355     catch( ClassNotFoundException ex ) {        
01356         System.exit( 0 );
01357     }
01358 }
01359 
01360 class DCSTableCellRenderer  extends DefaultTableCellRenderer 
01361 {
01362     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 
01363                                                    int row, int column) 
01364     {
01365         Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
01366 
01367         String cellValue = (String)value;
01368         String stripped;
01369 
01370         if(cellValue.equals("?")){
01371             return cell;
01372         }
01373 
01374         switch(column){
01375             case 0:  // row name
01376                 cell.setForeground(Color.black);
01377                 break;
01378 
01379             case 1:  // LV status
01380                 stripped = cellValue.substring(2, cellValue.length());
01381                 int status = Integer.parseInt(stripped,16);  // base 16 - hex
01382 
01383                 if((status & 0x20)==0){ // OK
01384                     cell.setForeground(Color.black);
01385                 }else{                  // FAIL
01386                     cell.setForeground(Color.red);
01387                 }
01388                 break;
01389 
01390             case 9:  // PASS/FAIL/TRIP
01391         
01392                 if(cellValue.equals("PASS")){
01393                     cell.setForeground(Color.green);
01394                 }else{
01395                     cell.setForeground(Color.red);
01396                 }
01397                 break;
01398 
01399             default:
01400                 float valueFloat = Float.parseFloat(cellValue);
01401                 float thisParameterLowerLimit = psChannelParametersLimits[column-1][0];
01402                 float thisParameterUpperLimit = psChannelParametersLimits[column-1][1];
01403        
01404                 if(valueFloat<thisParameterLowerLimit || valueFloat>thisParameterUpperLimit) {
01405                     cell.setForeground(Color.red);
01406                 }else{
01407                     cell.setForeground(Color.black);
01408                 }
01409                 break;
01410         }
01411         return cell;    
01412     }
01413 }
01414 
01415 //
01416 // Methods to set the colour of cells in the DAQ table
01417 //
01418 
01419 public void changeDAQTableCellsColor(JTable table)
01420 {
01421     TableCellRenderer   cellRenderer = new DAQTableCellRenderer();
01422     try {
01423         table.setDefaultRenderer(Class.forName("java.lang.String"), cellRenderer);
01424     }
01425     catch( ClassNotFoundException ex ) {        
01426         System.exit( 0 );
01427     }
01428 }
01429 
01430 class DAQTableCellRenderer  extends DefaultTableCellRenderer 
01431 {
01432     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 
01433                                                    int row, int column) 
01434     {
01435         Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
01436 
01437         String cellValue = (String)value;
01438 
01439         if(cellValue.equals("PASS")) {
01440             cell.setForeground(Color.green);
01441         }else if(cellValue.equals("FAIL")) {
01442             cell.setForeground(Color.red);
01443         }else if(cellValue.equals("Dead")) {
01444             cell.setForeground(Color.blue);
01445         }else{
01446             cell.setForeground(Color.black);
01447         }
01448 
01449         return cell;    
01450     }
01451 }
01452 
01453 //
01454 // Methods to set the colour of cells in the Summary table
01455 //
01456 
01457 public void changeSummaryTableCellsColor(JTable table)
01458 {
01459     TableCellRenderer   cellRenderer = new SummaryTableCellRenderer();
01460     try {
01461         table.setDefaultRenderer(Class.forName("java.lang.String"), cellRenderer);
01462     }
01463     catch( ClassNotFoundException ex ) {        
01464         System.exit( 0 );
01465     }
01466 }
01467 
01468 class SummaryTableCellRenderer  extends DefaultTableCellRenderer 
01469 {
01470     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 
01471                                                    int row, int column) 
01472     {
01473         Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
01474 
01475         String cellValue = (String)value;
01476 
01477         if(cellValue.equals("PASS")) {
01478             cell.setForeground(Color.green);
01479         }else if(cellValue.equals("FAIL")){
01480             cell.setForeground(Color.red);
01481         }else{
01482             cell.setForeground(Color.black);
01483         }
01484 
01485         return cell;    
01486     }
01487 }
01488 //the Graphis items definition
01489 private javax.swing.JPanel topPanel;
01490 private javax.swing.JPanel panelForLabels;
01491 private javax.swing.JLabel partitionLabel;
01492 private javax.swing.JLabel crateLabel;
01493 private javax.swing.JLabel rodLabel;
01494 private javax.swing.JLabel harnessMaxLabel;
01495 private javax.swing.JLabel rxLabel;
01496 private javax.swing.JLabel txLabel;
01497 private javax.swing.JLabel fileNameLabel;
01498 private javax.swing.JTextField partitionValue;
01499 private javax.swing.JTextField crateValue;
01500 private javax.swing.JTextField rodValue;
01501 private javax.swing.JTextField harnessMaxValue;
01502 private javax.swing.JTextField rxThValue;
01503 private javax.swing.JTextField txCurrentValue;
01504 private javax.swing.JTextField fileNameValue;
01505 private javax.swing.JTabbedPane jTabbedPaneTest;
01506 private javax.swing.JPanel panelForClose;
01507 private javax.swing.JButton closeButton;
01508 //summary Stuff
01509 private javax.swing.JPanel summaryHarnessPanel;
01510 private javax.swing.JButton performHarnessTestButton;
01511 private javax.swing.JScrollPane[] summaryScrollPanelForTable;
01512 private javax.swing.JTable[] summaryHarnessTable;
01513 private HarnessTestsSummaryTableModel[] summaryHarnessTableModels;
01514 
01515 //daq stuff
01516 private javax.swing.JTabbedPane jTabbedPaneDAQData;
01517 private javax.swing.JPanel[] daqHaernessPanels;
01518 private javax.swing.JPanel[] daqPanelForLabels;
01519 private javax.swing.JLabel[] daqSelectLineLabel;
01520 private javax.swing.JComboBox[] daqSelectLineChoices;
01521 private javax.swing.JButton[] performDAQScanButton;
01522 private javax.swing.JScrollPane[] daqScrollPanelForTable_Select0;
01523 private javax.swing.JTable[] daqHarnessTable_Select0;
01524 private SamplingDataTableModel[] daqHarnessTableModels_Select0;
01525 private javax.swing.JPanel[] daqPanelForSecondTable;
01526 private javax.swing.JScrollPane[] daqScrollPanelForTable_Select1;
01527 private javax.swing.JTable[] daqHarnessTable_Select1;
01528 private SamplingDataTableModel[] daqHarnessTableModels_Select1;
01529 
01530 //dcs stuff
01531 private javax.swing.JTabbedPane jTabbedPaneDCSData;
01532 private javax.swing.JPanel[]  dcsHarnessPanels;
01533 private javax.swing.JScrollPane[] dscScrollPanelForTable_Select0;
01534 private javax.swing.JTable[] dcsHarnessTable_Select0;
01535 private DCSDataTableModel[] dcsHarnessTableModels_Select0;
01536 private javax.swing.JPanel[] dcsPanelForSecondTable;
01537 private javax.swing.JScrollPane[] dscScrollPanelForTable_Select1;
01538 private javax.swing.JTable[] dcsHarnessTable_Select1;
01539 private DCSDataTableModel[] dcsHarnessTableModels_Select1;
01540 private javax.swing.JPanel[] dcsPanelForLabels;
01541 private javax.swing.JLabel[] stateTransitionLabel;
01542 private javax.swing.JComboBox[] transitionStateChoices;
01543 private javax.swing.JButton[] changePSStateButton;
01544 private javax.swing.JLabel[] dcsSelectLineLabel;
01545 private javax.swing.JComboBox[] dcsSelectLineChoices;
01546 private javax.swing.JButton[] performDCSScanButton;
01547 }
01548 

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