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

Generated on Thu Feb 3 17:42:19 2005 for SCT DAQ/DCS Software - Java by doxygen 1.3.5