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

📄 plotconsensus.java

📁 emboss的linux版本的源代码
💻 JAVA
字号:
/***************************************************************** This program is free software; you can redistribute it and/or* modify it under the terms of the GNU General Public License* as published by the Free Software Foundation; either version 2* of the License, or (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.**  @author: Copyright (C) Tim Carver*****************************************************************/package org.emboss.jemboss.editor;import java.io.*;import java.util.Vector;import java.util.Hashtable;import java.util.Enumeration;import javax.swing.*;import java.awt.*;/**** Plot the average similarity. This is calculated by:** <p> Av. Sim. =    sum( Mij*wi + Mji*w2  ) / *              ( (Nseq*Wsize)*((Nseq-1)*Wsize) )** <p>   sum   - over column*window size* <br>  M     - matrix comparison table* <br>  i,j   - wrt residue i or j* <br>  Nseq  - no. of sequences in the alignment* <br>  Wsize - window size**/public class PlotConsensus extends JPanel{  /** sum of scores for each column */  private float[] sumscore;  /** number of graph bins making up the seq length */  private int numbins;  /** residue width   */  private int interval;  /** minimum y value */  private float ymin = 0.f;  /** maximum y value */  private float ymax = 0.f;  /** associated sequence panel */  private GraphicSequenceCollection viewPane = null;  /**  *  * @param matrixFile	scoring matrix file  * @param seqs		vector of the Sequence objects  * @param winsize	window size  * @param interval 	residue width  * @param viewPane	graphical sequence view  *  */  public PlotConsensus(File matrixFile, Vector seqs, int winsize,                       int interval, GraphicSequenceCollection viewPane)  {    this.interval = interval;    this.viewPane = viewPane;    System.out.println("viewPane ");    Matrix mat = new Matrix(matrixFile);    createPlot(mat,seqs,winsize);  }  /**  *  * @param matrixFile   scoring matrix file  * @param seqs         vector of the Sequence objects  * @param winsize      window size  * @param interval     residue width  *   */  public PlotConsensus(File matrixFile, Vector seqs, int winsize,                       int interval)  {       this.interval = interval;    Matrix mat = new Matrix(matrixFile);    createPlot(mat,seqs,winsize);  }   /**  *  * @param matrixJar		jar file containing matrix  * @param matrixFilename     	scoring matrix file  * @param seqs           	vector of the Sequence objects  * @param winsize        	window size  * @param interval     	residue width  *   */  public PlotConsensus(String matrixJar, String matrixFileName,                       Vector seqs, int winsize,                       int interval)  {    this(new Matrix(matrixJar,matrixFileName),seqs,                                 winsize,interval);  }  /**  *  * @param mat     	scoring matrix  * @param seqs     	vector of the Sequence objects  * @param winsize   	window size  * @param interval     residue width  * @param viewPane	graphical sequence view  *   */  public PlotConsensus(Matrix mat, Vector seqs, int winsize,                       int interval, GraphicSequenceCollection viewPane)  {    this.viewPane = viewPane;    this.interval = interval;    createPlot(mat,seqs,winsize);  }   /**  *  * @param mat          scoring matrix  * @param seqs         vector of the Sequence objects  * @param winsize      window size  * @param interval     residue width  *   */  public PlotConsensus(Matrix mat,                       Vector seqs, int winsize,                       int interval)  {    this.interval = interval;    createPlot(mat,seqs,winsize);  }  /**  *  * Create the consensus plot  * @param mat 		scoring matrix  * @param seqs         vector of the Sequence objects  * @param winsize      window size  *  */  private void createPlot(Matrix mat, Vector seqs, int winsize)  {    int matrix[][] = mat.getMatrix();    int numseq = seqs.size();    int mseq = getMaxSequenceLength(seqs);    int matsize = mat.getIDimension();    numbins = mseq;    sumscore = new float[numbins];    float x[] = new float[numbins];    float y[] = new float[numbins];    int bin2 = (int)(winsize/2);    float score[][] = new float[numseq][mseq];    int m1, m2;    String s1, s2;    float contri,contrj;// loop over the sequence set length    for(int k=0; k < mseq; k++)    {// generate a score for each column      for(int i=0; i < numseq; i++)      {        s1 = getResidue(seqs,i,k);        m1 = mat.getMatrixIndex(s1);        for(int j=i+1; j < numseq; j++)        {          s2 = getResidue(seqs,j,k);          m2 = mat.getMatrixIndex(s2);          if(m1 >= 0 && m2 >= 0)          {            contrj = (float)matrix[m1][m2]*getSequenceWeight(seqs,j)+                            score[i][k];            contri = (float)matrix[m1][m2]*getSequenceWeight(seqs,i)+                            score[j][k];            score[i][k] = contrj;            score[j][k] = contri;          }             }      }      // calculate score for the entire window      if(k >= (winsize-1))      {        int binup = k+1;        int binlo = k - winsize + 1;        int binmid = binlo+bin2;        for(int i=0;i<numseq;i++)          for(int bin=binlo; bin < binup; bin++)            sumscore[binmid] += score[i][bin];      }    }    for(int bin=0; bin < numbins; bin++)    {      sumscore[bin] = sumscore[bin]/((float)(numseq*(numseq-1)*                                             winsize*winsize));      if(ymax<sumscore[bin])        ymax = sumscore[bin];      if(ymin>sumscore[bin])        ymin = sumscore[bin];    }//  if(ymin<0)//    ymin = ymin*-1.f;       setPlotSize(); }  /**  *   * Set the consensus plot preferred size using the  * graph dimensions  *  */  public void setPlotSize()  {    setPreferredSize(new Dimension(numbins*interval,                      (int)(ymax-ymin+1)*interval));  }  /**  *  * Returns the residue of the sequence i at position k  * @param seqs		vector of Sequence objects  * @param i		sequence index  * @param k 		sequence position  * @return		residue k from sequence i  *  */  public String getResidue(Vector seqs, int i, int k)  {    String res = "-";    try    {      res = ((Sequence)seqs.get(i)).getSequence().substring(k,k+1);    }    catch(StringIndexOutOfBoundsException sexp){}    return res;  }  /**  *  * Returns the weight of sequence i  * @param seqs         vector of Sequence objects  * @param i            sequence index  * @return 		sequence weight  *  */  public float getSequenceWeight(Vector seqs, int i)  {    return ((Sequence)seqs.get(i)).getWeight();  }  /**  *  * Check all sequences lengths and return length of  * the longest sequence  * @param seqs		vector of Sequence objects  * @return		length of the longest sequence  *  */  public int getMaxSequenceLength(Vector seqs)  {    int len = 0;    Enumeration enumer = seqs.elements();    while(enumer.hasMoreElements())    {      Sequence seq = (Sequence)enumer.nextElement();      if(len < seq.getLength())        len = seq.getLength();    }    return len;  }  /**  *  * Override paintComponent to draw consensus plot  * @param g	graphics  *  */  public void paintComponent(Graphics g)  {    super.paintComponent(g);    int y1,y2;    float scale = 2/(ymax-ymin);    float ytop  = scale*ymax*interval;//  System.out.println("MAX "+ymax+" MIN "+ymin+" SCALE "+scale);        int istart = 0;    int istop  = numbins;    if(viewPane != null)    {      Rectangle viewRect = viewPane.getViewRect();      istart = viewRect.x/interval - 2;      if(istart < 0)        istart = 0;      istop  = istart + viewRect.width/interval+4;      if(istop > numbins)        istop = numbins;    }//  System.out.println("istart "+istart+" istop "+istop+//                     " interval "+interval);      g.setColor(Color.lightGray);    g.drawLine(0,(int)(scale*ymax*interval),               numbins*interval,(int)(scale*ymax*interval));    g.setColor(Color.red);    for(int bin=istart; bin+1 < istop; bin++)    {      y1 = (int)(ytop-(scale*sumscore[bin]*interval));      y2 = (int)(ytop-(scale*sumscore[bin+1]*interval));      g.drawLine((int)((bin+0.5)*interval),y1,                 (int)((bin+1.5)*interval),y2);    }  }  /**  *  * Set the interval  * @param interval	interval  *  */  public void setInterval(int interval)  {    this.interval = interval;  }  public static void main(String args[])  {    Vector seqs = new Vector();    seqs.add(new Sequence("MHQDGISSMNQLGGLFVNGRP"));    seqs.add(new Sequence("-MQNSHSGVNQLGGVFVNGRP"));    seqs.add(new Sequence("STPLGQGRVNQLGGVFINGRP"));    seqs.add(new Sequence("STPLGQGRVNQLGGVFINGRP"));    seqs.add(new Sequence("-MEQTYGEVNQLGGVFVNGRP"));    int wsize = 2;    int interval = 10;    Matrix mat = new Matrix("resources/resources.jar",                            "EDNAFULL");    PlotConsensus pc =  new PlotConsensus(mat,seqs,wsize,interval);    JFrame f = new JFrame("Plot Consensus");    JPanel pane = (JPanel)f.getContentPane();    pane.add(pc);    pane.setPreferredSize(pc.getPreferredSize());    f.setSize(pc.getPreferredSize());    f.pack();    f.setVisible(true);  }}

⌨️ 快捷键说明

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