0
|
1 package datastructures;
|
|
2
|
|
3 import java.util.Vector;
|
|
4
|
|
5 /**
|
|
6 * @author Ali Abdallah
|
|
7 * @version 01.2011
|
|
8 * @since jdk 1.6.0
|
|
9 */
|
|
10
|
|
11 public class GenomeFrame extends Frame{
|
|
12
|
|
13 int limit;
|
|
14 Vector<Integer> hits;
|
|
15
|
|
16 public GenomeFrame(int start, int length) {
|
|
17 super(start, length);
|
|
18 limit = end;
|
|
19 hits = new Vector<Integer>(length);
|
|
20 hits.setSize(length);
|
|
21 for(int i = 0; i < length; i++){
|
|
22 hits.set(i, 0);
|
|
23 }
|
|
24 }
|
|
25
|
|
26 public int getHit(int base){
|
|
27 if(base-start < hits.size())
|
|
28 return hits.get(base-start);
|
|
29 else
|
|
30 return -1;
|
|
31 }
|
|
32
|
|
33 public void setHit(int base, int bhits){
|
|
34 if(base-start < hits.size()){
|
|
35 hits.set(base-start, bhits);
|
|
36 }
|
|
37 }
|
|
38
|
|
39 public boolean contains(ReadFrame r){
|
|
40 return (start <= r.start() && end >= r.end());
|
|
41 }
|
|
42
|
|
43 public boolean overlaps(ReadFrame r){
|
|
44 return (end >= r.start() && end < r.end());
|
|
45 }
|
|
46
|
|
47
|
|
48
|
|
49 public void addBases(int nr){
|
|
50 for(int i = 0; i < nr; i++){
|
|
51 hits.add(1);
|
|
52 }
|
|
53 }
|
|
54
|
|
55 public String toString(){
|
|
56 return start+":"+end+" ("+limit+")";
|
|
57 }
|
|
58
|
|
59
|
|
60 public void updateHits(ReadFrame read) {
|
|
61 for(int base = read.start(); base <= read.end(); base++){
|
|
62 setHit(base, getHit(base)+1);
|
|
63 }
|
|
64 }
|
|
65
|
|
66 public void updateFrameFromRightEnd(ReadFrame readF) {
|
|
67 // TODO Auto-generated method stub
|
|
68 for(int i = end+1; i <= readF.end(); i++)
|
|
69 hits.add(0);
|
|
70 end = readF.end();
|
|
71 }
|
|
72
|
|
73 public boolean limitExceeded(ReadFrame readF) {
|
|
74 return readF.start() > limit;
|
|
75 }
|
|
76
|
|
77 public void updateFrameFromBothEnds(ReadFrame readF, int length) {
|
|
78 for(int i = end-readF.start()+1; i < length; i++ )
|
|
79 hits.add(0);
|
|
80 for(int i = 0; i < readF.start()-start; i++)
|
|
81 hits.remove(0);
|
|
82 start = readF.start();
|
|
83 end = start+length-1;
|
|
84 limit = end;
|
|
85 }
|
|
86
|
|
87 }
|