@@ -2,6 +2,7 @@ use crate::utils::*;
22use anyhow:: { Error , Ok } ;
33use bio:: io:: fastq;
44use log:: * ;
5+ use rayon:: prelude:: * ;
56
67#[ allow( clippy:: too_many_arguments) ]
78pub fn sort_fastq (
@@ -13,7 +14,7 @@ pub fn sort_fastq(
1314 reverse : bool ,
1415 out : Option < & String > ,
1516 compression_level : u32 ,
16- stdout_type : char ,
17+ stdout_type : char
1718) -> Result < ( ) , Error > {
1819
1920 let mut n = 0 ;
@@ -57,28 +58,28 @@ pub fn sort_fastq(
5758 if sort_by_name {
5859 info ! ( "sort read by name" ) ;
5960 if reverse {
60- vec_reads. sort_by ( |a, b| {
61+ vec_reads. par_sort_by ( |a, b| {
6162 let read_name1 = if let Some ( des) = a. desc ( ) {
6263 format ! ( "{} {}" , a. id( ) , des)
6364 } else {
6465 a. id ( ) . to_string ( )
6566 } ;
6667 let read_name2 = if let Some ( des) = b. desc ( ) {
67- format ! ( "{} {}" , a . id( ) , des)
68+ format ! ( "{} {}" , b . id( ) , des)
6869 } else {
6970 b. id ( ) . to_string ( )
7071 } ;
7172 read_name2. cmp ( & read_name1)
7273 } ) ;
7374 } else {
74- vec_reads. sort_by ( |a, b| {
75+ vec_reads. par_sort_by ( |a, b| {
7576 let read_name1 = if let Some ( des) = a. desc ( ) {
7677 format ! ( "{} {}" , a. id( ) , des)
7778 } else {
7879 a. id ( ) . to_string ( )
7980 } ;
8081 let read_name2 = if let Some ( des) = b. desc ( ) {
81- format ! ( "{} {}" , a . id( ) , des)
82+ format ! ( "{} {}" , b . id( ) , des)
8283 } else {
8384 b. id ( ) . to_string ( )
8485 } ;
@@ -88,23 +89,23 @@ pub fn sort_fastq(
8889 } else if sort_by_seq {
8990 info ! ( "sort read by sequence" ) ;
9091 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 ( ) ) ) ;
9293 } 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 ( ) ) ) ;
9495 }
9596 } else if sort_by_length {
9697 info ! ( "sort read by length" ) ;
9798 if reverse {
9899 //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 ( ) ) )
100101 } else {
101102 //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 ( ) )
103104 }
104105 } else if sort_by_gc {
105106 info ! ( "sort read by gc content" ) ;
106107 if reverse {
107- vec_reads. sort_by ( |a, b| {
108+ vec_reads. par_sort_by ( |a, b| {
108109 let r1_gc = a
109110 . seq ( )
110111 . iter ( )
@@ -120,7 +121,7 @@ pub fn sort_fastq(
120121 r2_gc. partial_cmp ( & r1_gc) . unwrap ( )
121122 } ) ;
122123 } else {
123- vec_reads. sort_by ( |a, b| {
124+ vec_reads. par_sort_by ( |a, b| {
124125 let r1_gc = a
125126 . seq ( )
126127 . iter ( )
0 commit comments