SequenceFeature display added
[jalview.git] / src / jalview / datamodel / Sequence.java
1 package jalview.datamodel;\r
2 \r
3 import jalview.analysis.*;\r
4 import java.awt.*;\r
5 import java.util.*;\r
6 import MCview.*;\r
7 \r
8 \r
9 public class Sequence implements SequenceI\r
10 {\r
11   protected String   name;\r
12   protected String   sequence;\r
13   protected String description;\r
14   protected int      start;\r
15   protected int      end;\r
16   protected String   displayId;\r
17   protected Color    color = Color.white;\r
18   String pdbId;\r
19   PDBfile pdb;\r
20 \r
21    public int maxchain = -1;\r
22    public int pdbstart;\r
23    public int pdbend;\r
24    public int seqstart;\r
25    public int seqend;\r
26 \r
27    public Vector sequenceFeatures = new Vector();\r
28    public void setSequenceFeatures(Vector v)\r
29    {\r
30      sequenceFeatures = v;\r
31    }\r
32 \r
33    public Vector getSequenceFeatures()\r
34    {return sequenceFeatures; }\r
35 \r
36    public void setPDBId(String id)\r
37    {\r
38      pdbId = id;\r
39    }\r
40    public String getPDBId()\r
41    {\r
42      return pdbId;\r
43    }\r
44 \r
45    public void setPDBfile(PDBfile pdb)\r
46    {\r
47      this.pdb = pdb;\r
48      int max = -10;\r
49      maxchain = -1;\r
50 \r
51      for (int i=0; i < pdb.chains.size(); i++) {\r
52 \r
53        System.out.println("PDB sequence = " + ((PDBChain)pdb.chains.elementAt(i)).sequence);\r
54        // Now lets compare the sequences to get\r
55        // the start and end points.\r
56 \r
57 \r
58      StringTokenizer str = new StringTokenizer(sequence, ".");\r
59      String newString = "";\r
60 \r
61      while (str.hasMoreTokens()) {\r
62          newString += str.nextToken();\r
63      }\r
64        // Align the sequence to the pdb\r
65        AlignSeq as = new AlignSeq(this,((PDBChain)pdb.chains.elementAt(i)).sequence,"pep");\r
66        as.calcScoreMatrix();\r
67        as.traceAlignment();\r
68        as.printAlignment();\r
69 \r
70        System.out.println("Score = " + as.maxscore);\r
71        if (as.maxscore > max) {\r
72          System.out.println("New max score");\r
73          max = as.maxscore;\r
74          maxchain = i;\r
75 \r
76          pdbstart = as.seq2start;\r
77          pdbend = as.seq2end;\r
78          seqstart = as.seq1start  - 1 ;\r
79          seqend = as.seq1end  -1;\r
80        }\r
81 \r
82        System.out.println("PDB start/end " + pdbstart + " " + pdbend);\r
83        System.out.println("SEQ start/end " + seqstart + " " + seqend);\r
84      }\r
85    }\r
86 \r
87   public Sequence(String name, String sequence, int start, int end)\r
88   {\r
89 \r
90     this.name     = name;\r
91     this.sequence = sequence;\r
92     this.start    = start;\r
93     this.end      = end;\r
94 \r
95     setDisplayId();\r
96 \r
97   }\r
98 \r
99   public Sequence(String name,String sequence) {\r
100     this(name,sequence,1,sequence.length());\r
101   }\r
102   public Sequence(SequenceI seq) {\r
103     this(seq.getName(),seq.getSequence(),seq.getStart(),seq.getEnd());\r
104   }\r
105   public String getDisplayId() {\r
106     return displayId;\r
107   }\r
108   public void setDisplayId() {\r
109     displayId = name + "/" + start + "-" + end;\r
110   }\r
111   public void setName(String name) {\r
112     this.name = name;\r
113     setDisplayId();\r
114   }\r
115   public String getName() {\r
116     return this.name;\r
117   }\r
118   public void setStart(int start) {\r
119     this.start = start;\r
120     setDisplayId();\r
121   }\r
122   public int getStart() {\r
123     return this.start;\r
124   }\r
125   public void setEnd(int end) {\r
126     this.end = end;\r
127     setDisplayId();\r
128   }\r
129   public int getEnd() {\r
130     return this.end;\r
131   }\r
132   public int getLength() {\r
133     return this.sequence.length();\r
134   }\r
135   public void setSequence(String seq) {\r
136     this.sequence = seq;\r
137   }\r
138   public String getSequence() {\r
139     return this.sequence;\r
140   }\r
141   public String getSequence(int start,int end) {\r
142     return this.sequence.substring(start,end);\r
143   }\r
144 \r
145   public char getCharAt(int i) {\r
146     if (i < sequence.length()) {\r
147       return sequence.charAt(i);\r
148     } else {\r
149       return ' ';\r
150     }\r
151   }\r
152   public void setDescription(String desc) {\r
153     this.description = desc;\r
154   }\r
155   public String getDescription() {\r
156     return this.description;\r
157   }\r
158 \r
159   public int findIndex(int pos) {\r
160     // returns the alignment position for a residue\r
161     int j = start;\r
162     int i = 0;\r
163 \r
164     while (i< sequence.length() && j <= end && j <= pos) {\r
165 \r
166       char c = sequence.charAt(i);\r
167 \r
168       if (!jalview.util.Comparison.isGap((c)))\r
169         j++;\r
170 \r
171       i++;\r
172     }\r
173     if (j == end && j < pos)\r
174       return end+1;\r
175     else\r
176       return i;\r
177 \r
178   }\r
179 \r
180   public int findPosition(int i) {\r
181     // Returns the sequence position for an alignment position\r
182     int j   = 0;\r
183     int pos = start;\r
184 \r
185     while (j < i)\r
186     {\r
187       char c = sequence.charAt(j);\r
188 \r
189       if (!jalview.util.Comparison.isGap((c)))\r
190         pos++;\r
191 \r
192       j++;\r
193     }\r
194     return pos;\r
195   }\r
196   public void deleteCharAt(int i)\r
197   {\r
198     StringBuffer sbuffer = new StringBuffer(sequence);\r
199     sbuffer.deleteCharAt(i);\r
200     sequence = sbuffer.toString();\r
201   }\r
202 \r
203   public void insertCharAt(int i, char c)\r
204   {\r
205     insertCharAt(i,c,true);\r
206   }\r
207 \r
208   public void insertCharAt(int i,char c,boolean chop) {\r
209 \r
210     String tmp = new String(sequence);\r
211 \r
212     if (i < sequence.length()) {\r
213       sequence = tmp.substring(0,i) + String.valueOf(c) + tmp.substring(i);\r
214     } else {\r
215       sequence = tmp + String.valueOf(c);\r
216     }\r
217 \r
218   }\r
219 \r
220   public void        setColor(Color c) {\r
221     this.color = c;\r
222   }\r
223 \r
224   public Color       getColor() {\r
225     return color;\r
226   }\r
227 \r
228 }\r