Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

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

Generated on Fri Jan 14 12:49:53 2005 for SCT DAQ/DCS Software - Java by doxygen 1.3.5