jpayne@68
|
1 package kmer;
|
jpayne@68
|
2
|
jpayne@68
|
3 import java.util.concurrent.atomic.AtomicLong;
|
jpayne@68
|
4
|
jpayne@68
|
5 import fileIO.ByteStreamWriter;
|
jpayne@68
|
6 import structures.ByteBuilder;
|
jpayne@68
|
7
|
jpayne@68
|
8 /**
|
jpayne@68
|
9 * @author Brian Bushnell
|
jpayne@68
|
10 * @date Oct 22, 2013
|
jpayne@68
|
11 *
|
jpayne@68
|
12 */
|
jpayne@68
|
13 public class KmerNode1D extends KmerNode {
|
jpayne@68
|
14
|
jpayne@68
|
15 /*--------------------------------------------------------------*/
|
jpayne@68
|
16 /*---------------- Initialization ----------------*/
|
jpayne@68
|
17 /*--------------------------------------------------------------*/
|
jpayne@68
|
18
|
jpayne@68
|
19 public KmerNode1D(long pivot_){
|
jpayne@68
|
20 super(pivot_);
|
jpayne@68
|
21 }
|
jpayne@68
|
22
|
jpayne@68
|
23 public KmerNode1D(long pivot_, int value_){
|
jpayne@68
|
24 super(pivot_);
|
jpayne@68
|
25 value=value_;
|
jpayne@68
|
26 }
|
jpayne@68
|
27
|
jpayne@68
|
28 @Override
|
jpayne@68
|
29 public final KmerNode makeNode(long pivot_, int value_){
|
jpayne@68
|
30 return new KmerNode1D(pivot_, value_);
|
jpayne@68
|
31 }
|
jpayne@68
|
32
|
jpayne@68
|
33 @Override
|
jpayne@68
|
34 public final KmerNode makeNode(long pivot_, int[] values_, int vlen){
|
jpayne@68
|
35 throw new RuntimeException("Unimplemented");
|
jpayne@68
|
36 }
|
jpayne@68
|
37
|
jpayne@68
|
38 /*--------------------------------------------------------------*/
|
jpayne@68
|
39 /*---------------- Public Methods ----------------*/
|
jpayne@68
|
40 /*--------------------------------------------------------------*/
|
jpayne@68
|
41
|
jpayne@68
|
42 @Override
|
jpayne@68
|
43 public final int set(long kmer, int[] vals, int vlen) {
|
jpayne@68
|
44 throw new RuntimeException("Unimplemented.");
|
jpayne@68
|
45 }
|
jpayne@68
|
46
|
jpayne@68
|
47 /*--------------------------------------------------------------*/
|
jpayne@68
|
48 /*---------------- Nonpublic Methods ----------------*/
|
jpayne@68
|
49 /*--------------------------------------------------------------*/
|
jpayne@68
|
50
|
jpayne@68
|
51 @Override
|
jpayne@68
|
52 public int value(){return value;}
|
jpayne@68
|
53
|
jpayne@68
|
54 @Override
|
jpayne@68
|
55 protected int[] values(int[] singleton){
|
jpayne@68
|
56 assert(singleton.length==1);
|
jpayne@68
|
57 singleton[0]=value;
|
jpayne@68
|
58 return singleton;
|
jpayne@68
|
59 }
|
jpayne@68
|
60
|
jpayne@68
|
61 @Override
|
jpayne@68
|
62 public int set(int value_){return value=value_;}
|
jpayne@68
|
63
|
jpayne@68
|
64 @Override
|
jpayne@68
|
65 protected int set(int[] values_, int vlen){
|
jpayne@68
|
66 throw new RuntimeException("Unimplemented");
|
jpayne@68
|
67 }
|
jpayne@68
|
68
|
jpayne@68
|
69 @Override
|
jpayne@68
|
70 int numValues(){return value<1 ? 0 : 1;}
|
jpayne@68
|
71
|
jpayne@68
|
72 /*--------------------------------------------------------------*/
|
jpayne@68
|
73 /*---------------- Private Methods ----------------*/
|
jpayne@68
|
74 /*--------------------------------------------------------------*/
|
jpayne@68
|
75
|
jpayne@68
|
76 /*--------------------------------------------------------------*/
|
jpayne@68
|
77 /*---------------- Resizing and Rebalancing ----------------*/
|
jpayne@68
|
78 /*--------------------------------------------------------------*/
|
jpayne@68
|
79
|
jpayne@68
|
80 @Override
|
jpayne@68
|
81 boolean canResize() {
|
jpayne@68
|
82 return false;
|
jpayne@68
|
83 }
|
jpayne@68
|
84
|
jpayne@68
|
85 @Override
|
jpayne@68
|
86 public boolean canRebalance() {
|
jpayne@68
|
87 return true;
|
jpayne@68
|
88 }
|
jpayne@68
|
89
|
jpayne@68
|
90 @Deprecated
|
jpayne@68
|
91 @Override
|
jpayne@68
|
92 public int arrayLength() {
|
jpayne@68
|
93 throw new RuntimeException("Unsupported.");
|
jpayne@68
|
94 }
|
jpayne@68
|
95
|
jpayne@68
|
96 @Deprecated
|
jpayne@68
|
97 @Override
|
jpayne@68
|
98 void resize() {
|
jpayne@68
|
99 throw new RuntimeException("Unsupported.");
|
jpayne@68
|
100 }
|
jpayne@68
|
101
|
jpayne@68
|
102 @Deprecated
|
jpayne@68
|
103 @Override
|
jpayne@68
|
104 public void rebalance() {
|
jpayne@68
|
105 throw new RuntimeException("Please call rebalance(ArrayList<KmerNode>) instead, with an empty list.");
|
jpayne@68
|
106 }
|
jpayne@68
|
107
|
jpayne@68
|
108 /*--------------------------------------------------------------*/
|
jpayne@68
|
109 /*---------------- Info Dumping ----------------*/
|
jpayne@68
|
110 /*--------------------------------------------------------------*/
|
jpayne@68
|
111
|
jpayne@68
|
112 @Override
|
jpayne@68
|
113 public final boolean dumpKmersAsBytes(ByteStreamWriter bsw, int k, int mincount, int maxcount, AtomicLong remaining){
|
jpayne@68
|
114 if(value<1){return true;}
|
jpayne@68
|
115 if(value>=mincount){
|
jpayne@68
|
116 if(remaining!=null && remaining.decrementAndGet()<0){return true;}
|
jpayne@68
|
117 bsw.printlnKmer(pivot, value, k);
|
jpayne@68
|
118 }
|
jpayne@68
|
119 if(left!=null){left.dumpKmersAsBytes(bsw, k, mincount, maxcount, remaining);}
|
jpayne@68
|
120 if(right!=null){right.dumpKmersAsBytes(bsw, k, mincount, maxcount, remaining);}
|
jpayne@68
|
121 return true;
|
jpayne@68
|
122 }
|
jpayne@68
|
123
|
jpayne@68
|
124 @Override
|
jpayne@68
|
125 public final boolean dumpKmersAsBytes_MT(final ByteStreamWriter bsw, final ByteBuilder bb, final int k, final int mincount, int maxcount, AtomicLong remaining){
|
jpayne@68
|
126 if(value<1){return true;}
|
jpayne@68
|
127 if(value>=mincount){
|
jpayne@68
|
128 if(remaining!=null && remaining.decrementAndGet()<0){return true;}
|
jpayne@68
|
129 toBytes(pivot, value, k, bb);
|
jpayne@68
|
130 bb.nl();
|
jpayne@68
|
131 if(bb.length()>=16000){
|
jpayne@68
|
132 ByteBuilder bb2=new ByteBuilder(bb);
|
jpayne@68
|
133 synchronized(bsw){bsw.addJob(bb2);}
|
jpayne@68
|
134 bb.clear();
|
jpayne@68
|
135 }
|
jpayne@68
|
136 }
|
jpayne@68
|
137 if(left!=null){left.dumpKmersAsBytes_MT(bsw, bb, k, mincount, maxcount, remaining);}
|
jpayne@68
|
138 if(right!=null){right.dumpKmersAsBytes_MT(bsw, bb, k, mincount, maxcount, remaining);}
|
jpayne@68
|
139 return true;
|
jpayne@68
|
140 }
|
jpayne@68
|
141
|
jpayne@68
|
142 @Override
|
jpayne@68
|
143 protected final StringBuilder dumpKmersAsText(StringBuilder sb, int k, int mincount, int maxcount){
|
jpayne@68
|
144 if(value<1){return sb;}
|
jpayne@68
|
145 if(sb==null){sb=new StringBuilder(32);}
|
jpayne@68
|
146 if(value>=mincount){sb.append(AbstractKmerTable.toText(pivot, value, k)).append('\n');}
|
jpayne@68
|
147 if(left!=null){left.dumpKmersAsText(sb, k, mincount, maxcount);}
|
jpayne@68
|
148 if(right!=null){right.dumpKmersAsText(sb, k, mincount, maxcount);}
|
jpayne@68
|
149 return sb;
|
jpayne@68
|
150 }
|
jpayne@68
|
151
|
jpayne@68
|
152 @Override
|
jpayne@68
|
153 protected final ByteBuilder dumpKmersAsText(ByteBuilder bb, int k, int mincount, int maxcount){
|
jpayne@68
|
154 if(value<1){return bb;}
|
jpayne@68
|
155 if(bb==null){bb=new ByteBuilder(32);}
|
jpayne@68
|
156 if(value>=mincount){bb.append(AbstractKmerTable.toBytes(pivot, value, k)).append('\n');}
|
jpayne@68
|
157 if(left!=null){left.dumpKmersAsText(bb, k, mincount, maxcount);}
|
jpayne@68
|
158 if(right!=null){right.dumpKmersAsText(bb, k, mincount, maxcount);}
|
jpayne@68
|
159 return bb;
|
jpayne@68
|
160 }
|
jpayne@68
|
161
|
jpayne@68
|
162 @Override
|
jpayne@68
|
163 final boolean TWOD(){return false;}
|
jpayne@68
|
164
|
jpayne@68
|
165 /*--------------------------------------------------------------*/
|
jpayne@68
|
166 /*---------------- Invalid Methods ----------------*/
|
jpayne@68
|
167 /*--------------------------------------------------------------*/
|
jpayne@68
|
168
|
jpayne@68
|
169 /*--------------------------------------------------------------*/
|
jpayne@68
|
170 /*---------------- Fields ----------------*/
|
jpayne@68
|
171 /*--------------------------------------------------------------*/
|
jpayne@68
|
172
|
jpayne@68
|
173 int value;
|
jpayne@68
|
174
|
jpayne@68
|
175 }
|