watch end of sequence when asking for (start, end)
[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     if(end>=sequence.length())\r
143       end = sequence.length()-1;\r
144     return this.sequence.substring(start,end);\r
145   }\r
146 \r
147   public char getCharAt(int i) {\r
148     if (i < sequence.length()) {\r
149       return sequence.charAt(i);\r
150     } else {\r
151       return ' ';\r
152     }\r
153   }\r
154   public void setDescription(String desc) {\r
155     this.description = desc;\r
156   }\r
157   public String getDescription() {\r
158     return this.description;\r
159   }\r
160 \r
161   public int findIndex(int pos) {\r
162     // returns the alignment position for a residue\r
163     int j = start;\r
164     int i = 0;\r
165 \r
166     while (i< sequence.length() && j <= end && j <= pos) {\r
167 \r
168       char c = sequence.charAt(i);\r
169 \r
170       if (!jalview.util.Comparison.isGap((c)))\r
171         j++;\r
172 \r
173       i++;\r
174     }\r
175     if (j == end && j < pos)\r
176       return end+1;\r
177     else\r
178       return i;\r
179 \r
180   }\r
181 \r
182   public int findPosition(int i) {\r
183     // Returns the sequence position for an alignment position\r
184     int j   = 0;\r
185     int pos = start;\r
186 \r
187     while (j < i)\r
188     {\r
189       char c = sequence.charAt(j);\r
190 \r
191       if (!jalview.util.Comparison.isGap((c)))\r
192         pos++;\r
193 \r
194       j++;\r
195     }\r
196     return pos;\r
197   }\r
198   public void deleteCharAt(int i)\r
199   {\r
200     StringBuffer sbuffer = new StringBuffer(sequence);\r
201     sbuffer.deleteCharAt(i);\r
202     sequence = sbuffer.toString();\r
203   }\r
204 \r
205   public void insertCharAt(int i, char c)\r
206   {\r
207     insertCharAt(i,c,true);\r
208   }\r
209 \r
210   public void insertCharAt(int i,char c,boolean chop) {\r
211 \r
212     String tmp = new String(sequence);\r
213 \r
214     if (i < sequence.length()) {\r
215       sequence = tmp.substring(0,i) + String.valueOf(c) + tmp.substring(i);\r
216     } else {\r
217       sequence = tmp + String.valueOf(c);\r
218     }\r
219 \r
220   }\r
221 \r
222   public void        setColor(Color c) {\r
223     this.color = c;\r
224   }\r
225 \r
226   public Color       getColor() {\r
227     return color;\r
228   }\r
229 \r
230 }\r