@@ -2,6 +2,7 @@ use crate::utils::*;
2
2
use anyhow:: { Error , Ok } ;
3
3
use bio:: io:: fastq;
4
4
use log:: * ;
5
+ use rayon:: prelude:: * ;
5
6
6
7
#[ allow( clippy:: too_many_arguments) ]
7
8
pub fn sort_fastq (
@@ -13,7 +14,7 @@ pub fn sort_fastq(
13
14
reverse : bool ,
14
15
out : Option < & String > ,
15
16
compression_level : u32 ,
16
- stdout_type : char ,
17
+ stdout_type : char
17
18
) -> Result < ( ) , Error > {
18
19
19
20
let mut n = 0 ;
@@ -57,28 +58,28 @@ pub fn sort_fastq(
57
58
if sort_by_name {
58
59
info ! ( "sort read by name" ) ;
59
60
if reverse {
60
- vec_reads. sort_by ( |a, b| {
61
+ vec_reads. par_sort_by ( |a, b| {
61
62
let read_name1 = if let Some ( des) = a. desc ( ) {
62
63
format ! ( "{} {}" , a. id( ) , des)
63
64
} else {
64
65
a. id ( ) . to_string ( )
65
66
} ;
66
67
let read_name2 = if let Some ( des) = b. desc ( ) {
67
- format ! ( "{} {}" , a . id( ) , des)
68
+ format ! ( "{} {}" , b . id( ) , des)
68
69
} else {
69
70
b. id ( ) . to_string ( )
70
71
} ;
71
72
read_name2. cmp ( & read_name1)
72
73
} ) ;
73
74
} else {
74
- vec_reads. sort_by ( |a, b| {
75
+ vec_reads. par_sort_by ( |a, b| {
75
76
let read_name1 = if let Some ( des) = a. desc ( ) {
76
77
format ! ( "{} {}" , a. id( ) , des)
77
78
} else {
78
79
a. id ( ) . to_string ( )
79
80
} ;
80
81
let read_name2 = if let Some ( des) = b. desc ( ) {
81
- format ! ( "{} {}" , a . id( ) , des)
82
+ format ! ( "{} {}" , b . id( ) , des)
82
83
} else {
83
84
b. id ( ) . to_string ( )
84
85
} ;
@@ -88,23 +89,23 @@ pub fn sort_fastq(
88
89
} else if sort_by_seq {
89
90
info ! ( "sort read by sequence" ) ;
90
91
if reverse {
91
- vec_reads. sort_by ( |a, b| b. seq ( ) . cmp ( a. seq ( ) ) ) ;
92
+ vec_reads. par_sort_by ( |a, b| b. seq ( ) . cmp ( a. seq ( ) ) ) ;
92
93
} else {
93
- vec_reads. sort_by ( |a, b| a. seq ( ) . cmp ( b. seq ( ) ) ) ;
94
+ vec_reads. par_sort_by ( |a, b| a. seq ( ) . cmp ( b. seq ( ) ) ) ;
94
95
}
95
96
} else if sort_by_length {
96
97
info ! ( "sort read by length" ) ;
97
98
if reverse {
98
99
//vec_reads.sort_by(|a, b| b.seq().len().cmp(&a.seq().len()));
99
- vec_reads. sort_by_key ( |b| std:: cmp:: Reverse ( b. seq ( ) . len ( ) ) )
100
+ vec_reads. par_sort_by_key ( |b| std:: cmp:: Reverse ( b. seq ( ) . len ( ) ) )
100
101
} else {
101
102
//vec_reads.sort_by(|a, b| a.seq().len().cmp(&b.seq().len()));
102
- vec_reads. sort_by_key ( |a| a. seq ( ) . len ( ) )
103
+ vec_reads. par_sort_by_key ( |a| a. seq ( ) . len ( ) )
103
104
}
104
105
} else if sort_by_gc {
105
106
info ! ( "sort read by gc content" ) ;
106
107
if reverse {
107
- vec_reads. sort_by ( |a, b| {
108
+ vec_reads. par_sort_by ( |a, b| {
108
109
let r1_gc = a
109
110
. seq ( )
110
111
. iter ( )
@@ -120,7 +121,7 @@ pub fn sort_fastq(
120
121
r2_gc. partial_cmp ( & r1_gc) . unwrap ( )
121
122
} ) ;
122
123
} else {
123
- vec_reads. sort_by ( |a, b| {
124
+ vec_reads. par_sort_by ( |a, b| {
124
125
let r1_gc = a
125
126
. seq ( )
126
127
. iter ( )
0 commit comments