| 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 } |