@@ -16,7 +16,7 @@ use std::time::Instant;
16
16
extern crate arrayref;
17
17
extern crate num_cpus;
18
18
use anyhow:: Error ;
19
- use indicatif:: { ParallelProgressIterator , ProgressStyle } ;
19
+ use indicatif:: ParallelProgressIterator ;
20
20
use rayon:: prelude:: * ;
21
21
22
22
pub mod cli;
@@ -45,6 +45,8 @@ pub mod bloom_filter;
45
45
pub mod hashing;
46
46
47
47
pub mod utils;
48
+ use crate :: utils:: get_progress_bar;
49
+
48
50
use std:: fs:: { File , OpenOptions } ;
49
51
use std:: io:: copy;
50
52
@@ -59,7 +61,9 @@ pub const CHUNK_SIZE: usize = 1000;
59
61
#[ doc( hidden) ]
60
62
pub fn main ( ) -> Result < ( ) , Error > {
61
63
let args = cli_args ( ) ;
62
- if args. verbose {
64
+ if args. quiet {
65
+ simple_logger:: init_with_level ( log:: Level :: Error ) . unwrap ( ) ;
66
+ } else if args. verbose {
63
67
simple_logger:: init_with_level ( log:: Level :: Info ) . unwrap ( ) ;
64
68
// simple_logger::init_with_level(log::Level::Trace).unwrap();
65
69
} else {
@@ -76,8 +80,7 @@ pub fn main() -> Result<(), Error> {
76
80
#[ cfg( feature = "3 di") ]
77
81
convert_pdb,
78
82
output,
79
- k_vals,
80
- k_seq,
83
+ kmers,
81
84
mut sketch_size,
82
85
seq_type,
83
86
level,
@@ -97,7 +100,7 @@ pub fn main() -> Result<(), Error> {
97
100
log:: info!( "Getting input files" ) ;
98
101
let input_files = get_input_list ( file_list, seq_files) ;
99
102
log:: info!( "Parsed {} samples in input list" , input_files. len( ) ) ;
100
- let kmers = parse_kmers ( k_vals , k_seq ) ;
103
+ let kmers = parse_kmers ( kmers ) ;
101
104
// Build, merge
102
105
let rc = !* single_strand;
103
106
// Set expected sketchsize
@@ -128,6 +131,7 @@ pub fn main() -> Result<(), Error> {
128
131
rc,
129
132
* min_count,
130
133
* min_qual,
134
+ args. quiet ,
131
135
) ;
132
136
let sketch_vec = MultiSketch :: new ( & mut sketches, sketch_size, & kmers, seq_type) ;
133
137
sketch_vec
@@ -196,8 +200,8 @@ pub fn main() -> Result<(), Error> {
196
200
} ;
197
201
log:: info!( "{dist_type}" ) ;
198
202
199
- let bar_style =
200
- ProgressStyle :: with_template ( "{percent}% {bar:80.cyan/blue} eta:{eta}" ) . unwrap ( ) ;
203
+ let percent = true ; // In progress bar, don't show total number as huge
204
+
201
205
// TODO: possible improvement would be to load sketch slices when i, j change
202
206
// This would require a change to core_acc where multiple k-mer lengths are loaded at once
203
207
// Overall this would be nicer I think (not sure about speed)
@@ -210,10 +214,11 @@ pub fn main() -> Result<(), Error> {
210
214
log:: info!( "Calculating all ref vs ref distances" ) ;
211
215
let mut distances = DistanceMatrix :: new ( & references, None , dist_type) ;
212
216
let par_chunk = CHUNK_SIZE * distances. n_dist_cols ( ) ;
217
+ let progress_bar = get_progress_bar ( par_chunk, percent, args. quiet ) ;
213
218
distances
214
219
. dists_mut ( )
215
220
. par_chunks_mut ( par_chunk)
216
- . progress_with_style ( bar_style )
221
+ . progress_with ( progress_bar )
217
222
. enumerate ( )
218
223
. for_each ( |( chunk_idx, dist_slice) | {
219
224
// Get first i, j index for the chunk
@@ -228,7 +233,11 @@ pub fn main() -> Result<(), Error> {
228
233
references. get_sketch_slice ( j, k) ,
229
234
references. sketch_size ,
230
235
) ;
231
- dist = if * ani { ani_pois ( dist, k_f32) } else { 1.0_f32 - dist } ;
236
+ dist = if * ani {
237
+ ani_pois ( dist, k_f32)
238
+ } else {
239
+ 1.0_f32 - dist
240
+ } ;
232
241
dist_slice[ dist_idx] = dist;
233
242
} else {
234
243
let dist =
@@ -259,13 +268,14 @@ pub fn main() -> Result<(), Error> {
259
268
log:: info!( "Calculating sparse ref vs ref distances with {nn} nearest neighbours" ) ;
260
269
let mut sp_distances =
261
270
SparseDistanceMatrix :: new ( & references, nn, dist_type) ;
271
+ let progress_bar = get_progress_bar ( nn, percent, args. quiet ) ;
262
272
// TODO is it possible to add a template to the trait so this code is only written once? Maybe not
263
273
match sp_distances. dists_mut ( ) {
264
274
DistVec :: Jaccard ( distances) => {
265
275
let k = k_idx. unwrap ( ) ;
266
276
distances
267
277
. par_chunks_mut ( nn)
268
- . progress_with_style ( bar_style )
278
+ . progress_with ( progress_bar )
269
279
. enumerate ( )
270
280
. for_each ( |( i, row_dist_slice) | {
271
281
let mut heap = BinaryHeap :: with_capacity ( nn) ;
@@ -279,8 +289,11 @@ pub fn main() -> Result<(), Error> {
279
289
references. get_sketch_slice ( j, k) ,
280
290
references. sketch_size ,
281
291
) ;
282
- dist =
283
- if * ani { ani_pois ( dist, k_f32) } else { 1.0_f32 - dist } ;
292
+ dist = if * ani {
293
+ ani_pois ( dist, k_f32)
294
+ } else {
295
+ 1.0_f32 - dist
296
+ } ;
284
297
let dist_item = SparseJaccard ( j, dist) ;
285
298
if heap. len ( ) < nn
286
299
|| dist_item < * heap. peek ( ) . unwrap ( )
@@ -299,7 +312,7 @@ pub fn main() -> Result<(), Error> {
299
312
DistVec :: CoreAcc ( distances) => {
300
313
distances
301
314
. par_chunks_mut ( nn)
302
- . progress_with_style ( bar_style )
315
+ . progress_with ( progress_bar )
303
316
. enumerate ( )
304
317
. for_each ( |( i, row_dist_slice) | {
305
318
let mut heap = BinaryHeap :: with_capacity ( nn) ;
@@ -339,10 +352,11 @@ pub fn main() -> Result<(), Error> {
339
352
DistanceMatrix :: new ( & references, Some ( & query_db) , dist_type) ;
340
353
let par_chunk = CHUNK_SIZE * distances. n_dist_cols ( ) ;
341
354
let nq = query_db. number_samples_loaded ( ) ;
355
+ let progress_bar = get_progress_bar ( par_chunk, percent, args. quiet ) ;
342
356
distances
343
357
. dists_mut ( )
344
358
. par_chunks_mut ( par_chunk)
345
- . progress_with_style ( bar_style )
359
+ . progress_with ( progress_bar )
346
360
. enumerate ( )
347
361
. for_each ( |( chunk_idx, dist_slice) | {
348
362
// Get first i, j index for the chunk
@@ -355,7 +369,11 @@ pub fn main() -> Result<(), Error> {
355
369
query_db. get_sketch_slice ( j, k) ,
356
370
references. sketch_size ,
357
371
) ;
358
- dist = if * ani { ani_pois ( dist, k_f32) } else { 1.0_f32 - dist } ;
372
+ dist = if * ani {
373
+ ani_pois ( dist, k_f32)
374
+ } else {
375
+ 1.0_f32 - dist
376
+ } ;
359
377
dist_slice[ dist_idx] = dist;
360
378
} else {
361
379
let dist = core_acc_dist ( & references, & query_db, i, j) ;
@@ -474,6 +492,7 @@ pub fn main() -> Result<(), Error> {
474
492
rc,
475
493
* min_count,
476
494
* min_qual,
495
+ args. quiet ,
477
496
) ;
478
497
let mut db2_metadata =
479
498
MultiSketch :: new ( & mut db2_sketches, sketch_size, kmers, seq_type) ;
@@ -554,7 +573,7 @@ pub fn main() -> Result<(), Error> {
554
573
let end = Instant :: now ( ) ;
555
574
556
575
log:: info!( "Complete" ) ;
557
- if print_success {
576
+ if print_success && !args . quiet {
558
577
eprintln ! (
559
578
"🧬🖋️ sketchlib done in {}s" ,
560
579
end. duration_since( start) . as_secs( )
0 commit comments