1 package cluster;
2 
3 import java.io.Serializable;
4 
5 import shared.Tools;
6 import stream.Read;
7 
8 /**
9  * @author Brian Bushnell
10  * @date Mar 24, 2014
11  *
12  */
13 class ReadTag implements Serializable{
14 
15 	/**
16 	 *
17 	 */
18 	private static final long serialVersionUID = -6186366525723397478L;
19 
ReadTag(Read r_)20 	public ReadTag(Read r_){
21 		r=r_;
22 		strand=r.strand();
23 
24 		int gcCount_=0;
25 		for(byte b : r.bases){
26 			if(b=='G' || b=='C'){
27 				gcCount_++;
28 			}
29 		}
30 		gcCount=gcCount_;
31 
32 		processHeader(r.id);
33 	}
34 
processHeader(String s)35 	private void processHeader(String s){
36 		assert(false) : "TODO";
37 		gc=-1;
38 		depth=-1;
39 		cluster0=-1;
40 	}
41 
r1()42 	Read r1(){
43 		return strand==0 ? r : r.mate;
44 	}
45 
r2()46 	Read r2(){
47 		return strand==1 ? r : r.mate;
48 	}
49 
tag1()50 	ReadTag tag1(){
51 		return (ReadTag)r1().obj;
52 	}
53 
tag2()54 	ReadTag tag2(){
55 		Read r2=r2();
56 		return r2==null ? null : (ReadTag)r2.obj;
57 	}
58 
59 //	private int[] toKmers(final int k){
60 //		return ClusterTools.toKmers(r.bases, null, k);
61 //	}
62 
kmerArray1(int k1)63 	int[] kmerArray1(int k1){
64 		if(kmerArray1==null){kmerArray1=ClusterTools.toKmers(r.bases, null, k1);}
65 		return kmerArray1;
66 	}
67 
kmerArray2(int k2)68 	int[] kmerArray2(int k2){
69 		if(kmerArray2==null){kmerArray2=ClusterTools.toKmerCounts(r.bases, null, k2);}
70 		return kmerArray2;
71 	}
72 
kmerFreq2(int k2)73 	float[] kmerFreq2(int k2){
74 		if(kmerFreq2==null){
75 			int[] counts=kmerArray2(k2);
76 			if(counts!=null){
77 				long sum=Tools.sum(counts);
78 				kmerFreq2=new float[counts.length];
79 				float extra=(0.05f/counts.length);
80 				float mult=0.95f/sum;
81 				for(int i=0; i<counts.length; i++){
82 					kmerFreq2[i]=counts[i]*mult+extra;
83 				}
84 			}
85 		}
86 		return kmerFreq2;
87 	}
88 
89 	/** Sorted long kmers */
90 	private int[] kmerArray1;
91 
92 	/** Canonically-ordered short kmer counts */
93 	private int[] kmerArray2;
94 
95 	private float[] kmerFreq2;
96 
97 	final Read r;
98 	final byte strand;
99 	final int gcCount;
100 
101 	int depth;
102 	int cluster0=-1; //initial cluster
103 	int cluster1=-1; //final cluster
104 
105 	float gc;
106 
107 }
108