Team:Freiburg software/Code/DisplaySequence.java

From 2009.igem.org


org.synbiowave.biojava.DisplaySequence

/*
    Copyright: synbiowave
     
    License: GPL
     
    Authors: Paul Staab
     
    Version: 0.1 
    
    DESCRIPTION:
    	This class can be used to create different visualizations of a DNA-Sequence
*/

package org.synbiowave.biojava;

import org.biojava.bio.seq.DNATools;
import org.biojava.bio.seq.RNATools;
import org.biojava.bio.symbol.SymbolList;
 
/**
 * <p>Class to create various visualizations of a DNA-Sequence</p>
 */
 
public class DisplaySequence {
	private SymbolList symL;
	
	public DisplaySequence(String[] args) throws Exception
	{
	
	}
	
	public DisplaySequence(SymbolList symL) throws Exception
	{
		//ToDo: Check for DNA and throw error
		this.symL = symL;
	}	

	/** Setter for the DNA-Sequence stored in a SymbolList */
	public void set_Sequenz(SymbolList symL) throws Exception
	{
		//ToDo: Check for DNA and throw error
		this.symL = symL;
	}
	
	/** Getter for the DNA-Sequence stored in a SymbolList */
	public SymbolList get_Sequenz() throws Exception
	{
		return this.symL;
	}
	
	/** Displays a Single ReadingFrame (number in 1-6 with 1-3 
	 * being forward and 4-6 being backward readingframes) plus the sequence */
	public String displaySingleReadingFrame(int number) throws Exception  
	{
		if (number > 3) return displaySingleReadingFrame(number-3,true);
		else return displaySingleReadingFrame(number,false);
	} 

	/** Displays the Sequence and a single readingframe;
	 * 	number is the number of the readingframe to display (1-3)
	 *  backwards = false means forward reading frames, true backward ones */
	public String displaySingleReadingFrame(int number, boolean backwards) throws Exception
	{
		return
		generateReadingframe(number,backwards) +
		this.symL.seqString() + "\n" +
        addNumberation(this.symL.length());
	}  

	/** Displays the Sequence and the 3 forward readingframes */
	public String displayFwReadingFrames() throws Exception
	{
		return 
		generateReadingframe(1,false) +
		generateReadingframe(2,false) +
		generateReadingframe(3,false) +
        this.symL.seqString() + "\n" +
        addNumberation(this.symL.length());
	}
	
	/** Displays the Sequence and the 3 backward readingframes */
	public String displayRevReadingFrames() throws Exception
	{
		return 
		generateReadingframe(1,true) +
		generateReadingframe(2,true) +
		generateReadingframe(3,true) +
        DNATools.reverseComplement(this.symL).seqString() + "\n" +
        addNumberation(this.symL.length());
	}	
	
	/** Displays the Sequence and all 6 readingframes */
	public String displayAllReadingFrames() throws Exception
	{
		return 
		generateReadingframe(1,false) + //"<br>" +
		generateReadingframe(2,false) + //"<br>" +
		generateReadingframe(3,false) + //"<br>" +
        this.symL.seqString() + //"<br>" +
        addNumberation(this.symL.length()) + //"<br>" +
        DNATools.reverseComplement(this.symL).seqString() + //"<br>" +
        generateReadingframe(3,true) + //"<br>" +
        generateReadingframe(2,true) + //"<br>" +
        generateReadingframe(1,true) ; //"<br>";
		
	}

	static private String addNumberation(int end)
	{
		String returnvalue = "1";
		for (int i = 2; i <= end; i++)
		{
			if (i%10 == 0) returnvalue += Integer.toString(i);
			else if (i%10 < Integer.toString(i).length()) ; 
			else returnvalue += " ";
		}
		return returnvalue + "\n";
	}
	
	/** Generates a basic formatted readingframe */
	private String generateReadingframe(int number, boolean backwards) throws Exception
	{
		SymbolList symL;
		String formattedReadingframe = "";
		
		//ToDo: FEHLER AUSGEBEN WENN NUMBER > 3
		number --;
		
		if (backwards) symL = DNATools.reverseComplement(this.symL);
		else symL = this.symL;
		
		//Translate the DNA into AA
    	symL = symL.subList(number+1, symL.length() - (symL.length() - number)%3);
    	symL = DNATools.toRNA(symL);
    	symL = RNATools.translate(symL);
    	
    	//Insert beginning spaces
		for (int i = 1; i < number + 1; i++) 
		{
			formattedReadingframe += " ";
		}
		
		//Insert 2 spaces between each AA		
		for (int i = 1; i <= symL.length() ; i++) 
		{
			formattedReadingframe += symL.subStr(i, i) + "  " ;
		}
		
		return formattedReadingframe + "\n";
	}
}