📄 nussinov.java
字号:
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 + -