@@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize};
99
1010#[ derive( Serialize , Deserialize ) ]
1111struct Summary {
12- total_taxon_count : usize ,
12+ taxons_identified : Vec < i32 > ,
1313 reads_extracted_per_taxon : FxHashMap < i32 , usize > ,
1414 total_reads_in : usize ,
1515 total_reads_out : usize ,
@@ -88,6 +88,7 @@ impl Kractor {
8888 fn process_reads ( & mut self ) -> Result < ( ) > {
8989 let paired = self . args . input . len ( ) == 2 ;
9090 let input_format = if paired { "paired" } else { "single" } ;
91+ let reads_extracted_per_taxon = self . get_reads_extracted_per_taxon ( ) ;
9192
9293 if paired {
9394 let ( ( reads_parsed1, reads_output1) , ( reads_parsed2, reads_output2) ) =
@@ -105,8 +106,8 @@ impl Kractor {
105106 let reads_out = reads_output1 + reads_output2;
106107
107108 self . summary = Some ( Summary {
108- total_taxon_count : self . taxon_ids . len ( ) ,
109- reads_extracted_per_taxon : self . reads_per_taxon . clone ( ) ,
109+ taxons_identified : self . taxon_ids . clone ( ) ,
110+ reads_extracted_per_taxon : reads_extracted_per_taxon . clone ( ) ,
110111 total_reads_in : reads_in,
111112 total_reads_out : reads_out,
112113 proportion_extracted : reads_out as f64 / reads_in as f64 ,
@@ -133,8 +134,8 @@ impl Kractor {
133134 let reads_out = reads_output1;
134135
135136 self . summary = Some ( Summary {
136- total_taxon_count : self . taxon_ids . len ( ) ,
137- reads_extracted_per_taxon : self . reads_per_taxon . clone ( ) ,
137+ taxons_identified : self . taxon_ids . clone ( ) ,
138+ reads_extracted_per_taxon,
138139 missing_taxon_ids : self . missing_taxon_ids . clone ( ) ,
139140 total_reads_in : reads_in,
140141 total_reads_out : reads_out,
@@ -162,6 +163,14 @@ impl Kractor {
162163 Ok ( ( ) )
163164 }
164165
166+ fn get_reads_extracted_per_taxon ( & self ) -> FxHashMap < i32 , usize > {
167+ let mut reads_extracted_per_taxon = self . reads_per_taxon . clone ( ) ;
168+ for taxon_id in & self . taxon_ids {
169+ reads_extracted_per_taxon. entry ( * taxon_id) . or_insert ( 0 ) ;
170+ }
171+ reads_extracted_per_taxon
172+ }
173+
165174 pub fn run ( & mut self ) -> Result < ( ) > {
166175 info ! (
167176 "Starting kractor at {}" ,
@@ -236,4 +245,33 @@ mod tests {
236245 let kractor = Kractor :: new ( args) ;
237246 assert ! ( kractor. validate_outputs( ) . is_err( ) ) ;
238247 }
248+
249+ #[ test]
250+ fn test_get_reads_extracted_per_taxon ( ) {
251+ let input_files = vec ! [ PathBuf :: from( "input.fastq" ) ] ;
252+ let args = Cli {
253+ input : input_files,
254+ output : vec ! [ PathBuf :: from( "output.fastq" ) ] ,
255+ kraken : PathBuf :: from ( "kraken_output.txt" ) ,
256+ report : None ,
257+ taxid : vec ! [ 2901879 , 227984 ] ,
258+ output_type : None ,
259+ compression_level : niffler:: Level :: One ,
260+ parents : false ,
261+ children : false ,
262+ exclude : false ,
263+ output_fasta : false ,
264+ summary : false ,
265+ no_report_header_detect : false ,
266+ verbose : false ,
267+ } ;
268+ let mut kractor = Kractor :: new ( args) ;
269+ kractor. taxon_ids = vec ! [ 2901879 , 227984 ] ;
270+ kractor. reads_per_taxon . insert ( 227984 , 257 ) ;
271+
272+ let reads_extracted_per_taxon = kractor. get_reads_extracted_per_taxon ( ) ;
273+
274+ assert_eq ! ( reads_extracted_per_taxon. get( & 2901879 ) , Some ( & 0 ) ) ;
275+ assert_eq ! ( reads_extracted_per_taxon. get( & 227984 ) , Some ( & 257 ) ) ;
276+ }
239277}
0 commit comments