package org.seqcode.motifs; /** * ConsensusSequence: simple class to represent consensus DNA sequences * @author mahony * */ public class ConsensusSequence { private static int MAXLETTERVAL = Math.max(Math.max(Math.max('A','C'),Math.max('T','G')), Math.max(Math.max('a','c'),Math.max('t','g'))) + 1; private static char[] allLetters = {'A','a','C','c','T','t','G','g'}; private static char[] letters = {'A','C','T','G'}; private boolean[][] consensusMatrix; //Represents whether the consensus allows each character at each position private String consensus; private int length; public ConsensusSequence(String cons){this(cons.toCharArray());} public ConsensusSequence(char[] cons){ consensus = new String(cons); consensusMatrix = new boolean[cons.length][MAXLETTERVAL]; length = cons.length; for(int i=0; i<cons.length; i++) for(int j=0; j<MAXLETTERVAL; j++) consensusMatrix[i][j]=false; for(int i=0; i<cons.length; i++){ if(Character.toUpperCase(cons[i])=='A' || Character.toUpperCase(cons[i])=='C' || Character.toUpperCase(cons[i])=='G' || Character.toUpperCase(cons[i])=='T') consensusMatrix[i][Character.toUpperCase(cons[i])]=true; else if(Character.toUpperCase(cons[i])=='N'){ consensusMatrix[i]['A']=true; consensusMatrix[i]['C']=true; consensusMatrix[i]['C']=true; consensusMatrix[i]['T']=true; }else if(Character.toUpperCase(cons[i])=='R'){ consensusMatrix[i]['A']=true; consensusMatrix[i]['G']=true; }else if(Character.toUpperCase(cons[i])=='Y'){ consensusMatrix[i]['C']=true; consensusMatrix[i]['T']=true; }else if(Character.toUpperCase(cons[i])=='M'){ consensusMatrix[i]['A']=true; consensusMatrix[i]['C']=true; }else if(Character.toUpperCase(cons[i])=='K'){ consensusMatrix[i]['G']=true; consensusMatrix[i]['T']=true; }else if(Character.toUpperCase(cons[i])=='S'){ consensusMatrix[i]['C']=true; consensusMatrix[i]['G']=true; }else if(Character.toUpperCase(cons[i])=='W'){ consensusMatrix[i]['A']=true; consensusMatrix[i]['T']=true; }else if(Character.toUpperCase(cons[i])=='H'){ consensusMatrix[i]['A']=true; consensusMatrix[i]['C']=true; consensusMatrix[i]['T']=true; }else if(Character.toUpperCase(cons[i])=='B'){ consensusMatrix[i]['C']=true; consensusMatrix[i]['G']=true; consensusMatrix[i]['T']=true; }else if(Character.toUpperCase(cons[i])=='V'){ consensusMatrix[i]['A']=true; consensusMatrix[i]['C']=true; consensusMatrix[i]['G']=true; }else if(Character.toUpperCase(cons[i])=='D'){ consensusMatrix[i]['A']=true; consensusMatrix[i]['G']=true; consensusMatrix[i]['T']=true; } consensusMatrix[i]['a'] = consensusMatrix[i]['A']; consensusMatrix[i]['c'] = consensusMatrix[i]['C']; consensusMatrix[i]['g'] = consensusMatrix[i]['G']; consensusMatrix[i]['t'] = consensusMatrix[i]['T']; } } //Accessors public String getSequence(){return consensus;} public int getMaxMismatch(){return length;} public int getLength(){return length;} public boolean[][] getMatrix(){ return consensusMatrix;} }