Clover icon

jalviewX

  1. Project Clover database Wed Oct 31 2018 15:13:58 GMT
  2. Package jalview.io.vamsas

File Rangetype.java

 

Coverage histogram

../../../img/srcFileCovDistChart0.png
56% of files have more coverage

Code metrics

74
106
12
1
342
243
55
0.52
8.83
12
4.58

Classes

Class Line # Actions
Rangetype 43 106 55 192
0.00%
 

Contributing tests

No tests hitting this source file were found.

Source view

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.vamsas;
22   
23    import jalview.io.VamsasAppDatastore;
24    import jalview.util.MessageManager;
25   
26    import java.util.List;
27    import java.util.Vector;
28   
29    import uk.ac.vamsas.client.Vobject;
30    import uk.ac.vamsas.objects.core.Local;
31    import uk.ac.vamsas.objects.core.MapType;
32    import uk.ac.vamsas.objects.core.Mapped;
33    import uk.ac.vamsas.objects.core.RangeType;
34    import uk.ac.vamsas.objects.core.Seg;
35   
36    /**
37    * Enhances DatastoreItem objects with additional functions to do with RangeType
38    * objects
39    *
40    * @author JimP
41    *
42    */
 
43    public abstract class Rangetype extends DatastoreItem
44    {
45   
 
46  0 toggle public Rangetype()
47    {
48  0 super();
49    }
50   
 
51  0 toggle public Rangetype(VamsasAppDatastore datastore)
52    {
53  0 super(datastore);
54    }
55   
 
56  0 toggle public Rangetype(VamsasAppDatastore datastore, Vobject vobj,
57    Class jvClass)
58    {
59  0 super(datastore, vobj, jvClass);
60    }
61   
 
62  0 toggle public Rangetype(VamsasAppDatastore datastore, Object jvobj, Class vClass)
63    {
64  0 super(datastore, jvobj, vClass);
65    }
66   
67    /**
68    * get real bounds of a RangeType's specification. start and end are an
69    * inclusive range within which all segments and positions lie. TODO: refactor
70    * to vamsas utils
71    *
72    * @param dseta
73    * @return int[] { start, end}
74    */
 
75  0 toggle protected int[] getBounds(RangeType dseta)
76    {
77  0 if (dseta != null)
78    {
79  0 int[] se = null;
80  0 if (dseta.getSegCount() > 0 && dseta.getPosCount() > 0)
81    {
82  0 throw new Error(MessageManager.getString(
83    "error.invalid_vamsas_rangetype_cannot_resolve_lists"));
84    }
85  0 if (dseta.getSegCount() > 0)
86    {
87  0 se = getSegRange(dseta.getSeg(0), true);
88  0 for (int s = 1, sSize = dseta.getSegCount(); s < sSize; s++)
89    {
90  0 int nse[] = getSegRange(dseta.getSeg(s), true);
91  0 if (se[0] > nse[0])
92    {
93  0 se[0] = nse[0];
94    }
95  0 if (se[1] < nse[1])
96    {
97  0 se[1] = nse[1];
98    }
99    }
100    }
101  0 if (dseta.getPosCount() > 0)
102    {
103    // could do a polarity for pos range too. and pass back indication of
104    // discontinuities.
105  0 int pos = dseta.getPos(0).getI();
106  0 se = new int[] { pos, pos };
107  0 for (int p = 0, pSize = dseta.getPosCount(); p < pSize; p++)
108    {
109  0 pos = dseta.getPos(p).getI();
110  0 if (se[0] > pos)
111    {
112  0 se[0] = pos;
113    }
114  0 if (se[1] < pos)
115    {
116  0 se[1] = pos;
117    }
118    }
119    }
120  0 return se;
121    }
122  0 return null;
123    }
124   
125    /**
126    * map from a rangeType's internal frame to the referenced object's coordinate
127    * frame.
128    *
129    * @param dseta
130    * @return int [] { ref(pos)...} for all pos in rangeType's frame.
131    */
 
132  0 toggle protected int[] getMapping(RangeType dseta)
133    {
134  0 Vector posList = new Vector();
135  0 if (dseta != null)
136    {
137  0 int[] se = null;
138  0 if (dseta.getSegCount() > 0 && dseta.getPosCount() > 0)
139    {
140  0 throw new Error(MessageManager.getString(
141    "error.invalid_vamsas_rangetype_cannot_resolve_lists"));
142    }
143  0 if (dseta.getSegCount() > 0)
144    {
145  0 for (int s = 0, sSize = dseta.getSegCount(); s < sSize; s++)
146    {
147  0 se = getSegRange(dseta.getSeg(s), false);
148  0 int se_end = se[1 - se[2]] + (se[2] == 0 ? 1 : -1);
149  0 for (int p = se[se[2]]; p != se_end; p += se[2] == 0 ? 1 : -1)
150    {
151  0 posList.add(new Integer(p));
152    }
153    }
154    }
155  0 else if (dseta.getPosCount() > 0)
156    {
157  0 int pos = dseta.getPos(0).getI();
158   
159  0 for (int p = 0, pSize = dseta.getPosCount(); p < pSize; p++)
160    {
161  0 pos = dseta.getPos(p).getI();
162  0 posList.add(new Integer(pos));
163    }
164    }
165    }
166  0 if (posList != null && posList.size() > 0)
167    {
168  0 int[] range = new int[posList.size()];
169  0 for (int i = 0; i < range.length; i++)
170    {
171  0 range[i] = ((Integer) posList.elementAt(i)).intValue();
172    }
173  0 posList.clear();
174  0 return range;
175    }
176  0 return null;
177    }
178   
 
179  0 toggle protected int[] getIntervals(RangeType range)
180    {
181  0 int[] intervals = null;
182  0 Vector posList = new Vector();
183  0 if (range != null)
184    {
185  0 int[] se = null;
186  0 if (range.getSegCount() > 0 && range.getPosCount() > 0)
187    {
188  0 throw new Error(MessageManager.getString(
189    "error.invalid_vamsas_rangetype_cannot_resolve_lists"));
190    }
191  0 if (range.getSegCount() > 0)
192    {
193  0 for (int s = 0, sSize = range.getSegCount(); s < sSize; s++)
194    {
195  0 se = getSegRange(range.getSeg(s), false);
196  0 posList.addElement(new Integer(se[0]));
197  0 posList.addElement(new Integer(se[1]));
198    }
199    }
200  0 else if (range.getPosCount() > 0)
201    {
202  0 int pos = range.getPos(0).getI();
203   
204  0 for (int p = 0, pSize = range.getPosCount(); p < pSize; p++)
205    {
206  0 pos = range.getPos(p).getI();
207  0 posList.add(new Integer(pos));
208  0 posList.add(new Integer(pos));
209    }
210    }
211    }
212  0 if (posList != null && posList.size() > 0)
213    {
214  0 intervals = new int[posList.size()];
215  0 java.util.Enumeration e = posList.elements();
216  0 int i = 0;
217  0 while (e.hasMoreElements())
218    {
219  0 intervals[i++] = ((Integer) e.nextElement()).intValue();
220    }
221    }
222  0 return intervals;
223    }
224   
225    /**
226    * initialise a range type object from a set of start/end inclusive intervals
227    *
228    * @param mrt
229    * @param ranges
230    */
 
231  0 toggle protected void initRangeType(RangeType mrt, List<int[]> ranges)
232    {
233  0 for (int[] range : ranges)
234    {
235  0 Seg vSeg = new Seg();
236  0 vSeg.setStart(range[0]);
237  0 vSeg.setEnd(range[1]);
238  0 vSeg.setInclusive(true);
239  0 mrt.addSeg(vSeg);
240    }
241    }
242   
243    /**
244    *
245    * @param maprange
246    * where the from range is the local mapped range, and the to range
247    * is the 'mapped' range in the MapRangeType
248    * @param default
249    * unit for local
250    * @param default
251    * unit for mapped
252    * @return MapList
253    */
 
254  0 toggle protected jalview.util.MapList parsemapType(MapType maprange, int localu,
255    int mappedu)
256    {
257  0 jalview.util.MapList ml = null;
258  0 int[] localRange = getIntervals(maprange.getLocal());
259  0 int[] mappedRange = getIntervals(maprange.getMapped());
260  0 long lu = maprange.getLocal().hasUnit() ? maprange.getLocal().getUnit()
261    : localu;
262  0 long mu = maprange.getMapped().hasUnit()
263    ? maprange.getMapped().getUnit()
264    : mappedu;
265  0 ml = new jalview.util.MapList(localRange, mappedRange, (int) lu,
266    (int) mu);
267  0 return ml;
268    }
269   
 
270  0 toggle protected jalview.util.MapList parsemapType(MapType map)
271    {
272  0 if (!map.getLocal().hasUnit() || map.getMapped().hasUnit())
273    {
274  0 jalview.bin.Cache.log
275    .warn("using default mapping length of 1:1 for map "
276  0 + (map.isRegistered() ? map.getVorbaId().toString()
277    : ("<no Id registered> " + map.toString())));
278    }
279  0 return parsemapType(map, 1, 1);
280    }
281   
282    /**
283    * initialise a MapType object from a MapList object.
284    *
285    * @param maprange
286    * @param ml
287    * @param setUnits
288    */
 
289  0 toggle protected void initMapType(MapType maprange, jalview.util.MapList ml,
290    boolean setUnits)
291    {
292  0 initMapType(maprange, ml, setUnits, false);
293    }
294   
295    /**
296    *
297    * @param maprange
298    * @param ml
299    * @param setUnits
300    * @param reverse
301    * - reverse MapList mapping for Local and Mapped ranges and units
302    */
 
303  0 toggle protected void initMapType(MapType maprange, jalview.util.MapList ml,
304    boolean setUnits, boolean reverse)
305    {
306  0 if (ml == null)
307    {
308  0 throw new Error(MessageManager
309    .getString("error.implementation_error_maplist_is_null"));
310    }
311  0 maprange.setLocal(new Local());
312  0 maprange.setMapped(new Mapped());
313  0 if (!reverse)
314    {
315  0 initRangeType(maprange.getLocal(), ml.getFromRanges());
316  0 initRangeType(maprange.getMapped(), ml.getToRanges());
317    }
318    else
319    {
320  0 initRangeType(maprange.getLocal(), ml.getToRanges());
321  0 initRangeType(maprange.getMapped(), ml.getFromRanges());
322    }
323  0 if (setUnits)
324    {
325  0 if (!reverse)
326    {
327  0 maprange.getLocal().setUnit(ml.getFromRatio());
328  0 maprange.getMapped().setUnit(ml.getToRatio());
329    }
330    else
331    {
332  0 maprange.getLocal().setUnit(ml.getToRatio());
333  0 maprange.getMapped().setUnit(ml.getFromRatio());
334    }
335    // TODO: and verify - raise an implementation fault notice if local/mapped
336    // range % Local/Mapped Ratio != 0
337    // if (uk.ac.vamsas.objects.utils.Range.getIntervals(range))
338   
339    }
340    }
341   
342    }