BioJava:CookBook:Interfaces:Alignments

From BioJava

Jump to: navigation, search

Biojava can render alignments.

The approach is to take the Sequences you want to render, and insert them into a SimpleAlignment object. The next step is to take a TranslatedSequencePanel and connect your Alignment to it.

What you need to do next is to setup the renderers that will render your alignment. Start with a MultiLineRenderer. To the MultiLineRenderer you connect one AlignmentRenderer for each sequence in the alignment. Each AlignmentRenderer should have the label of the sequence it should render set on it. And in the end you connect a SymbolSequenceRenderer to each AlignmentRenderer. The same SymbolSequenceRenderer can be used for all the AlignmentRenderers.

So for an Alignment with three sequences labeled seq1, seq2 and seq3 the renderer tree would look like this:

                    __  AlignmentRenderer --- SymbolSequenceRenderer
                   |    label=labelForSeq1
                   |
                   |
MultilineRenderer -|--  AlignmentRenderer --- SymbolSequenceRenderer
                   |    label=labelForSeq2
                   |
                   |__
                        AlignmentRenderer --- SymbolSequenceRenderer
                        label=labelForSeq3

The following is a screenshot of the viewer generated by the AlignmentPanel class:

File:Alignment.jpg

/**
 * Class to create an alignment and then display it in a viewer.
 */
//Load Java libraries
import java.awt.*;
import java.util.*;
import javax.swing.*;
 
//Load BioJava libraries
import org.biojava.bio.*;
import org.biojava.bio.seq.*;
import org.biojava.bio.seq.io.*;
import org.biojava.bio.symbol.*;
import org.biojava.bio.gui.sequence.*;
 
public class AlignmentPanel extends JFrame {
  //Create references to the sequences
  Sequence seq, seq1, seq2, seq3;
 
  //Instantiate the BioJava GUI elements
 
  //TranslatedSequencePanel to hold the renderers 
  TranslatedSequencePanel tsp = new TranslatedSequencePanel();
  //AlignmentRenderer to hold each sequence
  AlignmentRenderer render1, render2, render3;
  //MultiLineRenderer to allow display of multiple tracks in the TranslatedSequencePanel
  MultiLineRenderer multi = new MultiLineRenderer();
  //SymbolSequenceRenderer to handle display of the sequence symbols - only one instance is needed
  SymbolSequenceRenderer symbol = new SymbolSequenceRenderer();
  //RulerRenderer to display sequence coordinates
  RulerRenderer ruler = new RulerRenderer();
 
  public AlignmentPanel(){
    super("Alignment Panel");
 
    //Create the sequences for the alignment
    try {
      seq1 = DNATools.createGappedDNASequence("GAAATCGATCGATAGCTTTTTTTTTTTACGATA-GACTAGCATTCCGAC", "seq1");
      seq2 = DNATools.createGappedDNASequence("GAAATCGATC-ATAGC----------TACGATACGACTAGCATTCCGAC", "seq2");
      seq3 = DNATools.createGappedDNASequence("GAAAT--ATC-ATAGC----------TACGATACGACTAGCATTCCGAC", "seq3");
    }
    catch (BioException bioe) {
      System.err.println("Bioexception: " + bioe);
    }
 
    //Add the sequences to a Map 
    Map<String, Sequence> list = new HashMap();        
    list.put("1", seq1);        
    list.put("2", seq2);        
    list.put("3", seq3);
 
    //Use the Map to create a new SimpleAlignment
    SimpleAlignment ali = new SimpleAlignment((Map) list);
 
    //Instantiate the renderers and set the labels and renderers
    render1 = new AlignmentRenderer();
    render1.setLabel(ali.getLabels().get(0));
    render1.setRenderer(symbol);
 
    render2 = new AlignmentRenderer();  
    render2.setLabel(ali.getLabels().get(1));
    render2.setRenderer(symbol);
 
    render3 = new AlignmentRenderer(); 
    render3.setLabel(ali.getLabels().get(2));
    render3.setRenderer(symbol);
 
    //Add the alignment renderers to the multi-line renderer
    multi.addRenderer(render1);
    multi.addRenderer(render2);
    multi.addRenderer(render3);
    multi.addRenderer(ruler);
 
    //Set the sequence in the TranslatedSequencePanel
    tsp.setSequence((SymbolList)ali);
    //Set the background colour of the TranslatedSequencePanel
    tsp.setOpaque(true);
    tsp.setBackground(Color.white);
    //Set the renderer for the TranslatedSequencePanel
    tsp.setRenderer(multi);  
 
    //Set up the display
    Container con = getContentPane();
    con.setLayout(new BorderLayout());
    con.add(tsp, BorderLayout.CENTER);
    setSize(400,200);
    setLocation(100,100);
    setVisible(true);  
  }
 
  /**
   * Main method
   */
  public static void main(String args []){
    new AlignmentPanel();
  }
}
Personal tools