package jalview.datamodel; import jalview.analysis.*; import java.awt.*; import java.util.*; import MCview.*; public class Sequence implements SequenceI { protected String name; protected String sequence; protected String description; protected int start; protected int end; protected String displayId; protected Color color = Color.white; String pdbId; PDBfile pdb; public int maxchain = -1; public int pdbstart; public int pdbend; public int seqstart; public int seqend; public Vector sequenceFeatures = new Vector(); public void setSequenceFeatures(Vector v) { sequenceFeatures = v; } public Vector getSequenceFeatures() {return sequenceFeatures; } public void setPDBId(String id) { pdbId = id; } public String getPDBId() { return pdbId; } public void setPDBfile(PDBfile pdb) { this.pdb = pdb; int max = -10; maxchain = -1; for (int i=0; i < pdb.chains.size(); i++) { System.out.println("PDB sequence = " + ((PDBChain)pdb.chains.elementAt(i)).sequence); // Now lets compare the sequences to get // the start and end points. StringTokenizer str = new StringTokenizer(sequence, "."); String newString = ""; while (str.hasMoreTokens()) { newString += str.nextToken(); } // Align the sequence to the pdb AlignSeq as = new AlignSeq(this,((PDBChain)pdb.chains.elementAt(i)).sequence,"pep"); as.calcScoreMatrix(); as.traceAlignment(); as.printAlignment(); System.out.println("Score = " + as.maxscore); if (as.maxscore > max) { System.out.println("New max score"); max = as.maxscore; maxchain = i; pdbstart = as.seq2start; pdbend = as.seq2end; seqstart = as.seq1start - 1 ; seqend = as.seq1end -1; } System.out.println("PDB start/end " + pdbstart + " " + pdbend); System.out.println("SEQ start/end " + seqstart + " " + seqend); } } public Sequence(String name, String sequence, int start, int end) { this.name = name; this.sequence = sequence; this.start = start; this.end = end; setDisplayId(); } public Sequence(String name,String sequence) { this(name,sequence,1,sequence.length()); } public Sequence(SequenceI seq) { this(seq.getName(),seq.getSequence(),seq.getStart(),seq.getEnd()); } public String getDisplayId() { return displayId; } public void setDisplayId() { displayId = name + "/" + start + "-" + end; } public void setName(String name) { this.name = name; setDisplayId(); } public String getName() { return this.name; } public void setStart(int start) { this.start = start; setDisplayId(); } public int getStart() { return this.start; } public void setEnd(int end) { this.end = end; setDisplayId(); } public int getEnd() { return this.end; } public int getLength() { return this.sequence.length(); } public void setSequence(String seq) { this.sequence = seq; } public String getSequence() { return this.sequence; } public String getSequence(int start,int end) { if(end>sequence.length()) end = sequence.length(); return this.sequence.substring(start,end); } public char getCharAt(int i) { if (i < sequence.length()) { return sequence.charAt(i); } else { return ' '; } } public void setDescription(String desc) { this.description = desc; } public String getDescription() { return this.description; } public int findIndex(int pos) { // returns the alignment position for a residue int j = start; int i = 0; while (i< sequence.length() && j <= end && j <= pos) { char c = sequence.charAt(i); if (!jalview.util.Comparison.isGap((c))) j++; i++; } if (j == end && j < pos) return end+1; else return i; } public int findPosition(int i) { // Returns the sequence position for an alignment position int j = 0; int pos = start; while (j < i && j