/** Constructs ESA Tables, one esa header corresponds to one esa table */
    private void yieldEsaTables() {
      //          algorithm is:
      //          1. acquire the eiaHeader of the current file;
      //          2. construct the ESA table one channel after another;
      //          3. update the status.
      int numberOfOpenedFiles = sourceFiles.size();
      ArrayList<ESATable> esaTables = new ArrayList<ESATable>(numberOfOpenedFiles);

      ESAHeader esaHeader;
      ESATable esaTable;
      for (int i = 0; i < numberOfOpenedFiles; i++) {
        // Get ESAHeader from each EDF file header
        esaHeader = MainWindow.srcEdfFileHeaders.get(i).getEsaHeader(); // 1.
        // Create ESATable using ESAHeader
        esaTable = new ESATable(esaHeader, true);
        esaTables.add(i, esaTable); // 2.
        // configure the status
        Boolean savedOnce = false; // start of 3.
        Boolean updateSinceLastSave = true;
        File workingFile = MainWindow.getWkEdfFiles().get(i);
        int cat = EDFTable.MasterHeaderCategory.ESA_WORKSET;
        esaTable.setStatesAllInOne(
            savedOnce, updateSinceLastSave, workingFile, cat, i); // end of 4.
        esaTable.setSourceMasterFile(sourceFiles.get(i)); // set source file
        // by wei wang
        //                if(readingFileCount < numberOfOpenedFiles) {
        //                	increaseReadingFileCount();
        //                }
      }
      MainWindow.setIniEsaTables(esaTables);
      MainWindow.setDupEsaTables(esaTables);
    }