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

📄 nussinov.java

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

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;
import javax.swing.text.DefaultCaret;

import norman.baba.grids.*;
import norman.baba.UI.*;
import norman.baba.utils.*;

/**
 * <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 Nussinov
    extends SimpleDP
    implements CellInteractInterface {

   protected JButton m_btnScoreTable;
   protected ScoreHash m_scoreHash;
   protected JLabel m_l4Choiche;
   protected LinkedList m_bifuratedCells;
   protected int m_movement;

   protected final int BACKWARDS = 1;
   protected final int FORWARDS = 2;


   // 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);

   }
}

   protected String m_alphabet;

   public Nussinov(JPanel contentPane,
                   String defaultString1) {
      super(contentPane, defaultString1, defaultString1);

      m_scoreHash = new ScoreHash();
      m_alphabet = "";
      m_bifuratedCells = new LinkedList();
   }

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

   public String getAlgorithmName() {
      return "Nussinov";
   }

   /**
    * ********************** CENTER AREA *********************************
    */
   protected void setCenter() {
      m_dpTable = (NTable) new NTable(8,8);
      m_dpTable.setCellListener(this);

      m_gridScrollArea.add(m_dpTable);
   }

   /**
    * ********************** EAST AREA *********************************
    */

   protected void setEast(JPanel rightPanel) {

     /**
      * This panel is the only object in "rightPanel". I did this to
      * add some insets on every border.
      */
     JPanel rightInsPanel = new JPanel();
     rightInsPanel.setLayout(new GridBagLayout());

     /** In the "rightInsPanel" panel there is: */
     m_currStatusPanel.setLayout(new GridBagLayout());

     m_dwPanel = new FourChsDrawablePanel();

     JLabel stringOne_title = new JLabel("String S1:");

     ///////////////////////////////////////////////////////

     m_StringOne.setText(emptyStringMessage);
     m_StringTwo.setText(emptyStringMessage);
     m_StringOne.setEditable(false);

     m_StringOne.setBorder(m_defaultStringBorder);

     ///////////////////////////////////////////////////////

     m_l1Choiche.setOpaque(true);
     m_l2Choiche.setOpaque(true);
     m_l3Choiche.setOpaque(true);
     m_l4Choiche = new JLabel();
     m_l4Choiche.setOpaque(true);

     ///////////////////////////////////////////////////////

     m_btnBeginning.setEnabled(false);
     m_btnBeginning.setMargin(new Insets(2, 8, 2, 8));

     m_btnNext.setEnabled(false);

     m_btnPrev.setEnabled(false);
     m_btnPrev.setMargin(new Insets(2, 8, 2, 8));

     m_btnEnd.setEnabled(false);
     m_btnEnd.setMargin(new Insets(2, 8, 2, 8));

     m_clearPanel.setAlignmentX( (float) 0.0);
     m_clearPanel.setAlignmentY( (float) 0.0);
     m_btnClear.setEnabled(false);
     m_btnClear.setAlignmentX( (float) 0.5);
     m_btnClear.setMargin(new Insets(2, 15, 2, 14));

     /////////////////////////////////////////////////////////////////////////
     // The gridbag constraints mess
     /////////////////////////////////////////////////////////////////////////
     rightInsPanel.add(stringOne_title,
                       new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0,
                                              GridBagConstraints.WEST,
                                              GridBagConstraints.NONE,
                                              new Insets(5, 0, 3, 0), 0, 0));
          ////////
     rightInsPanel.add(m_StringOne,
                       new GridBagConstraints(0, 1, 2, 1, 1.0, 0.0,
                                              GridBagConstraints.WEST,
                                              GridBagConstraints.HORIZONTAL,
                                              new Insets(0, 0, 0, 0), 2, 0));

     rightInsPanel.add(m_btnSetOne,
                       new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0,
                                              GridBagConstraints.CENTER,
                                              GridBagConstraints.NONE,
                                              new Insets(0, 5, 0, 0), 0, -3));

     ////////////////////////////////////////////////////////////////////////
     rightInsPanel.add(m_currStatusPanel,
                       new GridBagConstraints(0, 3, 3, 1, 0.0, 0.0,
                                              GridBagConstraints.WEST,
                                              GridBagConstraints.NONE,
                                              new Insets(5, 0, 5, 0), 0, 0));

     m_currStatusPanel.add(m_lDEqual,
                         new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
                                                GridBagConstraints.WEST,
                                                GridBagConstraints.HORIZONTAL,
                                                new Insets(5, 0, 5, 0), 1, 0));
     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, 40));
     m_currStatusPanel.add(m_l1Choiche,
                         new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0,
                                                GridBagConstraints.WEST,
                                                GridBagConstraints.NONE,
                                                new Insets(0, 0, 0, 0), 0, 0));
     m_currStatusPanel.add(m_l2Choiche,
                         new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0,
                                                GridBagConstraints.WEST,
                                                GridBagConstraints.NONE,
                                                new Insets(0, 0, 0, 0), 0, 0));
     m_currStatusPanel.add(m_l3Choiche,
                         new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0,
                                                GridBagConstraints.WEST,
                                                GridBagConstraints.NONE,
                                                new Insets(0, 0, 0, 0), 0, 0));
     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));

     ////////////////////////////////////////////////////////////////////////

     rightInsPanel.add(m_stepsButtonPanel,
                       new GridBagConstraints(0, 4, 3, 1, 0.0, 0.0,
                                              GridBagConstraints.WEST,
                                              GridBagConstraints.NONE,
                                              new Insets(0, 0, 0, 0), 0, 0));

     rightInsPanel.add(m_clearPanel,
                       new GridBagConstraints(1, 5, 1, 1, 0.0, 0.0,
                                              GridBagConstraints.WEST,
                                              GridBagConstraints.NONE,
                                              new Insets(0, 0, 0, 0), 0, 0));

     m_stepsButtonPanel.add(m_btnBeginning);
     m_stepsButtonPanel.add(m_btnPrev);
     m_stepsButtonPanel.add(m_btnNext);
     m_stepsButtonPanel.add(m_btnEnd);

     m_clearPanel.add(m_btnClear);

     rightPanel.add(rightInsPanel);

     m_btnSetOne.addActionListener(new SetButtonListener());

     m_btnBeginning.addActionListener(new MoveButtonListener());
     m_btnPrev.addActionListener(new MoveButtonListener());
     m_btnNext.addActionListener(new MoveButtonListener());
     m_btnEnd.addActionListener(new MoveButtonListener());
     m_btnClear.addActionListener(new MoveButtonListener());

      m_lDEqual.setText("D(i,j)= Max");

      m_l1Choiche.setText("D(i + 1, j)");
      m_l2Choiche.setText("D(i, j - 1)");
      m_l3Choiche.setText("D(i + 1, j - 1) + score");
      m_l4Choiche.setText("Max[D(i,k)+ D(k + 1,j)] (i<k<j)");
      m_l4Choiche.setOpaque(true);

      m_btnScoreTable = new JButton("Score Table");
      m_btnScoreTable.setEnabled(false);
      m_clearPanel.add(m_btnScoreTable);

      m_btnScoreTable.addActionListener(new ScoreButtonListener());
    }

//override simpleDP because there're no GAP-scores.
   protected boolean checkForBothStrings() {

         if (m_s1_size == 0){
            return false;
         }

         // NOTE: S1 = vertical, S2 = horizontal

         m_dpTable.setGridSize(m_s1_size + 1, m_s1_size + 1, true);
         int i;
         for (i = 0; i < m_s1_size; ++i) {
            m_dpTable.setCellValue(0, i + 1, m_s1.charAt(i));
            m_dpTable.setCellValue(i + 1, 0, m_s1.charAt(i));
         }

         updateInitCells();
         m_dpTable.setGridRectangle(1, 1, m_s1_size, m_s1_size);
         m_dpTable.setCellValue(0, 0, "D(i,j)");

         m_dpTable.repaint();
         m_gridScrollArea.doLayout();

         m_tableReady = true;
         m_btnNext.setEnabled(true);
         m_btnEnd.setEnabled(true);

         this.m_alphabet = this.buildAlphabet(m_s1);

         this.setDefaultScores();
         this.setCellScoresMatrix();

         m_btnScoreTable.setEnabled(true);

         return true;
   }

   protected void updateInitCells() {
       int i;

   CellElement tmpCell;

   for (i = 1; i< m_s1_size; ++i) {
      tmpCell = m_dpTable.getCell(i, i+1);
      tmpCell.setIntVal(0);
   }

   for (i = 0; i< m_s1_size ; ++i) {
      tmpCell = m_dpTable.getCell(i+1,i+1);
      tmpCell.setIntVal(0);
   }


   }

   protected String buildAlphabet(String s1) {
      HashSet hs = new HashSet();
      int i;

      String alphabet = "";

      for (i = 0; i < s1.length(); ++i) {
         hs.add(new Character(s1.charAt(i)));
      }

      Iterator it = hs.iterator();
      m_alphabet = "";
      while (it.hasNext()) {

⌨️ 快捷键说明

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