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

Generated on Thu Jul 15 09:55:43 2004 for SCT DAQ/DCS Software - Java by doxygen 1.3.5