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