⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smithwaterman.java

📁 Sequence alignement using different algorithms
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package norman.baba.algorithms;

import java.util.*;
import java.awt.*;
import javax.swing.*;

import norman.baba.grids.*;

/**
 * <p>Title: BABA</p>
 * <p>Description: Bioinformatique Research Project</p>
 * <p>Copyright: Copyright Norman Casagrande (c) 2003</p>
 * <p>Company: </p>
 * @author Norman Casagrande
 * @version 1.0
 */

public class SmithWaterman extends NeedlemanWunsch {

   protected static final int PHASE_SELECT_LOCAL = 2;

   protected JLabel m_l4Choiche;

   // Ridefine DrawablePanel
   protected class FourChsDrawablePanel
       extends DrawablePanel {
      public void paintComponent(Graphics g) {

         int startY;
         int verticalPos = this.getSize().height / 2 - 6;
         int width = this.getSize().width - 6;

         // /
         startY = verticalPos - 5;
         g.drawLine(4, startY, width, startY - 15);

         // //
         startY = verticalPos - 1;
         g.drawLine(4, startY, width, startY);


         // \
         startY = verticalPos + 2;
         g.drawLine(4, startY, width, startY + 15);

         // \\
         startY = verticalPos + 6;
         g.drawLine(4, startY, width, startY + 22);

      }
   }

   public SmithWaterman(JPanel contentPane,
                        String defaultString1, String defaultString2) {
      super(contentPane, defaultString1, defaultString2);
   }

   public SmithWaterman(JPanel contentPane) {
      this(contentPane, "", "");
   }

   public String getAlgorithmName() {
      return "Smith & Waterman Local Search";
   }

   protected void setEast(JPanel rightPanel) {
      super.setEast(rightPanel);

      m_l4Choiche = new JLabel("0");
      m_l4Choiche.setOpaque(true);

      putFourDrawablePanel();

      m_currStatusPanel.add(m_l4Choiche,
                            new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0,
                            GridBagConstraints.WEST,
                            GridBagConstraints.NONE,
                            new Insets(0, 0, 0, 0), 0, 0));

   }

   protected void putFourDrawablePanel() {
      m_currStatusPanel.remove(m_dwPanel);
      m_dwPanel = new FourChsDrawablePanel();
      m_currStatusPanel.add(m_dwPanel,
                            new GridBagConstraints(1, 0, 1, 4, 0.0, 0.0,
          GridBagConstraints.CENTER,
          GridBagConstraints.NONE,
          new Insets(0, 0, 0, 0), 15, 50));
      m_l4Choiche.setVisible(true);
   }

   protected void putOriginalDrawablePanel() {
      m_currStatusPanel.remove(m_dwPanel);
      m_dwPanel = new DrawablePanel();
      m_currStatusPanel.add(m_dwPanel,
                            new GridBagConstraints(1, 0, 1, 4, 0.0, 0.0,
          GridBagConstraints.CENTER,
          GridBagConstraints.NONE,
          new Insets(0, 0, 0, 0), 15, 50));
      m_l4Choiche.setVisible(false);
   }

   // Default GAP scores
   protected void setDefaultGap(int whichString) {
      switch (whichString) {
         case STRING_ONE:
            this.setGapSequence(this.getGapKSequence(GAP_ONE, -1), GAP_ONE);
            break;
         case STRING_TWO:
            this.setGapSequence(this.getGapKSequence(GAP_TWO, -1), GAP_TWO);
            break;
      }
   }

   // Default TABLE scores
   protected void setDefaultScores() {

      m_scoreHash.clearScores();

      int i, j;
      char a, b;
      for (i = 0; i < m_alphabet.length(); ++i) {
         for (j = 0; j < i+1; ++j) {
            //System.out.println("A: " + m_alphabet.charAt(j) +
            //                   " - B: " + m_alphabet.charAt(i));

            a = m_alphabet.charAt(j);
            b = m_alphabet.charAt(i);

            if (a == b) {
               m_scoreHash.setScore(a, b, 2);
            }
            else {
               m_scoreHash.setScore(a, b, -1);
            }
         }
      }
   }

   protected void stepForward(boolean showSteps) {

     switch (m_currentPhase) {

        case PHASE_CALC_GRID:

           if (m_currentStep >=
               (m_dpTable.getHCellsCount() - 2) *
               (m_dpTable.getVCellsCount() - 2)) {

              // Entering backtrack phase
              m_currentPhase = PHASE_SELECT_LOCAL;

              m_dpTable.clearDPHighlights();
              m_dpTable.clearAllArrows();
              m_dpTable.clearGridCircle();
              m_lDEqual.setText("D(x, x) = Select");
              m_l1Choiche.setText("No Pointer");
              m_l2Choiche.setText("No Pointer");
              m_l3Choiche.setText("No Pointer");
              m_l1Choiche.setBackground(m_mainPane.getBackground());
              m_l2Choiche.setBackground(m_mainPane.getBackground());
              m_l3Choiche.setBackground(m_mainPane.getBackground());

              putOriginalDrawablePanel();

              this.findMaxValues();
              setInfoMessage("Select Starting local!");

              //stepFWDBackTrack(showSteps);
           }
           else {
              setInfoMessage("Calculating DP Table. Step: " +
                                  m_currentStep);
              stepFWDCalc(showSteps);
           }

           break;

        case PHASE_SELECT_LOCAL:

           this.initBackward();

        case PHASE_BACKTRACK:

           stepFWDBackTrack(showSteps);
           break;
     }

  }

  protected void stepBackward() {

     CellElement currentCell;

     switch (m_currentPhase) {

        case PHASE_CALC_GRID:

           m_currentStep--;

           if (m_currentStep <= 0) {
              stepZero();
              return;
           }

           Point realD = getCoordsByStep(m_currentStep);
           currentCell = m_dpTable.getCell(realD.x, realD.y);

           // erasing pointers
           currentCell.clearAll();
           m_currentStep--;

           stepForward(true);

           break;

        case PHASE_SELECT_LOCAL:

          putFourDrawablePanel();

           m_currentStep--;
           m_currentPhase = PHASE_CALC_GRID;
           m_dpTable.clearHighlightColors();
           m_dpTable.clearInteractiveCells();
           stepForward(true);
           break;

        case PHASE_BACKTRACK:

           currentCell = (CellElement) m_backTrackList.getLast();
           currentCell.clearColor();

           if (m_backTrackList.size() <= 1) {
              m_currentPhase = PHASE_SELECT_LOCAL;
              m_backTrackList.clear();
              m_dpTable.clearAllArrows();
              m_dpTable.clearGridCircle();
              m_dpTable.clearHighlightColors();
              m_dpTable.clearInteractiveCells();
              setInfoMessage("Select Starting local!");

              m_lDEqual.setText("D(x, x) = Select");
              m_l1Choiche.setText("No Pointer");
              m_l2Choiche.setText("No Pointer");
              m_l3Choiche.setText("No Pointer");

              this.findMaxValues();
           }
           else {

              m_backTrackList.removeLast();
              currentCell = (CellElement) m_backTrackList.getLast();
              currentCell.clearColor();

              if (m_backTrackList.size() == 0) {
                 m_backtrackLastSel = m_dpTable.getLastCell();
              }
              else {
                 m_backtrackLastSel = (CellElement) m_backTrackList.getLast();
                 m_backTrackList.removeLast();
              }

              // cut result string
              boolean toErase = false;
              for (int i = 0; i < 3; i++) {
                 if (m_resLine[i].length() > 1) {
                    m_resLine[i] = m_resLine[i].substring(2,
                        m_resLine[i].length());
                 }
                 else {
                    m_resLine[i] = "";
                    toErase = true;
                 }
              }

              if (toErase) {
                 m_bottomResultArea.setText("");
              }

              stepFWDBackTrack(true);
           }

           break;
     }

  }

  /**
   * Ovveride of stepFWDCalc.
   * Now uses scores and consider the fourth possibility 0
   * when computing D(i,j)
   */
  protected void stepFWDCalc(boolean showSteps) {

     if (m_currentStep == 0) {
        m_btnSetOne.setEnabled(false);
        m_btnSetTwo.setEnabled(false);
        m_btnSetGapOne.setEnabled(false);
        m_btnSetGapTwo.setEnabled(false);
        m_btnScoreTable.setEnabled(false);

        m_btnPrev.setEnabled(true);
        m_btnBeginning.setEnabled(true);
     }

     Point realD = getCoordsByStep(m_currentStep);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -