Class |
Line # |
Actions |
|||
---|---|---|---|---|---|
PileUpfile | 43 | 60 | 20 |
1 | /* | |
2 | * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) | |
3 | * Copyright (C) $$Year-Rel$$ The Jalview Authors | |
4 | * | |
5 | * This file is part of Jalview. | |
6 | * | |
7 | * Jalview is free software: you can redistribute it and/or | |
8 | * modify it under the terms of the GNU General Public License | |
9 | * as published by the Free Software Foundation, either version 3 | |
10 | * of the License, or (at your option) any later version. | |
11 | * | |
12 | * Jalview is distributed in the hope that it will be useful, but | |
13 | * WITHOUT ANY WARRANTY; without even the implied warranty | |
14 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR | |
15 | * PURPOSE. See the GNU General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU General Public License | |
18 | * along with Jalview. If not, see <http://www.gnu.org/licenses/>. | |
19 | * The Jalview Authors are detailed in the 'AUTHORS' file. | |
20 | */ | |
21 | package jalview.io; | |
22 | ||
23 | /** | |
24 | * <p> | |
25 | * Title: | |
26 | * </p> | |
27 | * PileUpfile | |
28 | * <p> | |
29 | * Description: | |
30 | * </p> | |
31 | * | |
32 | * Read and write PileUp style MSF Files. This used to be the MSFFile class, and | |
33 | * was written according to the EBI's idea of a subset of the MSF alignment | |
34 | * format. But, that was updated to reflect current GCG style IO fashion, as | |
35 | * found in Emboss (thanks David Martin!) | |
36 | * | |
37 | */ | |
38 | import jalview.datamodel.SequenceI; | |
39 | import jalview.util.Format; | |
40 | ||
41 | import java.io.IOException; | |
42 | ||
43 | public class PileUpfile extends MSFfile | |
44 | { | |
45 | ||
46 | /** | |
47 | * Creates a new MSFfile object. | |
48 | */ | |
49 | 2 | public PileUpfile() |
50 | { | |
51 | } | |
52 | ||
53 | /** | |
54 | * Creates a new MSFfile object. | |
55 | * | |
56 | * @param inFile | |
57 | * DOCUMENT ME! | |
58 | * @param sourceType | |
59 | * DOCUMENT ME! | |
60 | * | |
61 | * @throws IOException | |
62 | * DOCUMENT ME! | |
63 | */ | |
64 | 0 | public PileUpfile(String inFile, DataSourceType sourceType) |
65 | throws IOException | |
66 | { | |
67 | 0 | super(inFile, sourceType); |
68 | } | |
69 | ||
70 | 1 | public PileUpfile(FileParse source) throws IOException |
71 | { | |
72 | 1 | super(source); |
73 | } | |
74 | ||
75 | 2 | @Override |
76 | public String print(SequenceI[] s, boolean jvsuffix) | |
77 | { | |
78 | 2 | StringBuffer out = new StringBuffer("PileUp"); |
79 | 2 | out.append(newline); |
80 | 2 | out.append(newline); |
81 | ||
82 | 2 | int max = 0; |
83 | 2 | int maxid = 0; |
84 | ||
85 | 2 | int i = 0; |
86 | 2 | int bigChecksum = 0; |
87 | 2 | int[] checksums = new int[s.length]; |
88 | 32 | while (i < s.length) |
89 | { | |
90 | 30 | checksums[i] = checkSum(s[i].getSequenceAsString()); |
91 | 30 | bigChecksum += checksums[i]; |
92 | 30 | i++; |
93 | } | |
94 | ||
95 | 2 | out.append(" MSF: " + s[0].getLength() + " Type: P Check: " |
96 | + bigChecksum % 10000 + " .."); | |
97 | 2 | out.append(newline); |
98 | 2 | out.append(newline); |
99 | 2 | out.append(newline); |
100 | ||
101 | 2 | i = 0; |
102 | 32 | while ((i < s.length) && (s[i] != null)) |
103 | { | |
104 | 30 | String seq = s[i].getSequenceAsString(); |
105 | 30 | out.append(" Name: " + printId(s[i], jvsuffix) + " oo Len: " |
106 | + seq.length() + " Check: " + checksums[i] | |
107 | + " Weight: 1.00"); | |
108 | 30 | out.append(newline); |
109 | ||
110 | 30 | if (seq.length() > max) |
111 | { | |
112 | 2 | max = seq.length(); |
113 | } | |
114 | ||
115 | 30 | if (s[i].getName().length() > maxid) |
116 | { | |
117 | 6 | maxid = s[i].getName().length(); |
118 | } | |
119 | ||
120 | 30 | i++; |
121 | } | |
122 | ||
123 | 2 | if (maxid < 10) |
124 | { | |
125 | 0 | maxid = 10; |
126 | } | |
127 | ||
128 | 2 | maxid++; |
129 | 2 | out.append(newline); |
130 | 2 | out.append(newline); |
131 | 2 | out.append("//"); |
132 | 2 | out.append(newline); |
133 | 2 | out.append(newline); |
134 | ||
135 | 2 | int len = 50; |
136 | ||
137 | 2 | int nochunks = (max / len) + (max % len > 0 ? 1 : 0); |
138 | ||
139 | 10 | for (i = 0; i < nochunks; i++) |
140 | { | |
141 | 8 | int j = 0; |
142 | ||
143 | 128 | while ((j < s.length) && (s[j] != null)) |
144 | { | |
145 | 120 | String name = printId(s[j], jvsuffix); |
146 | ||
147 | 120 | out.append(new Format("%-" + maxid + "s").form(name + " ")); |
148 | ||
149 | 720 | for (int k = 0; k < 5; k++) |
150 | { | |
151 | 600 | int start = (i * 50) + (k * 10); |
152 | 600 | int end = start + 10; |
153 | ||
154 | 600 | int length = s[j].getLength(); |
155 | 600 | if ((end < length) && (start < length)) |
156 | { | |
157 | 450 | out.append(s[j].getSequence(start, end)); |
158 | ||
159 | 450 | if (k < 4) |
160 | { | |
161 | 360 | out.append(" "); |
162 | } | |
163 | else | |
164 | { | |
165 | 90 | out.append(newline); |
166 | } | |
167 | } | |
168 | else | |
169 | { | |
170 | 150 | if (start < length) |
171 | { | |
172 | 30 | out.append(s[j].getSequenceAsString().substring(start)); |
173 | 30 | out.append(newline); |
174 | } | |
175 | else | |
176 | { | |
177 | 120 | if (k == 0) |
178 | { | |
179 | 0 | out.append(newline); |
180 | } | |
181 | } | |
182 | } | |
183 | } | |
184 | ||
185 | 120 | j++; |
186 | } | |
187 | ||
188 | 8 | out.append(newline); |
189 | } | |
190 | ||
191 | 2 | return out.toString(); |
192 | } | |
193 | } |