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