@@ -5,6 +5,7 @@ use std::{fs::File, io::BufReader, path::PathBuf};
55use clap:: Parser ;
66
77use indicatif:: ParallelProgressIterator ;
8+ use noodles:: core:: Position ;
89use rayon:: prelude:: * ;
910
1011use crate :: common:: { self , cli:: extract_chrom, keys, spdi} ;
@@ -59,12 +60,14 @@ fn copy_cf_bed(
5960) -> Result < ( ) , anyhow:: Error > {
6061 let mut reader = File :: open ( path_bed)
6162 . map ( BufReader :: new)
62- . map ( noodles:: bed:: Reader :: new) ?;
63+ . map ( noodles:: bed:: Reader :: < 3 , _ > :: new) ?;
6364
6465 tracing:: info!( " reading BED records..." ) ;
65- let bed_records = reader
66- . records :: < 3 > ( )
67- . collect :: < Result < Vec < noodles:: bed:: Record < 3 > > , _ > > ( ) ?;
66+ let mut bed_records = Vec :: new ( ) ;
67+ let mut record = noodles:: bed:: Record :: default ( ) ;
68+ while reader. read_record ( & mut record) ? != 0 {
69+ bed_records. push ( record. clone ( ) ) ;
70+ }
6871 tracing:: info!(
6972 " will process {} BED records in parallel..." ,
7073 bed_records. len( )
@@ -75,9 +78,15 @@ fn copy_cf_bed(
7578 . progress_with ( common:: cli:: progress_bar ( bed_records. len ( ) ) )
7679 . map ( |record| {
7780 let chrom = record. reference_sequence_name ( ) ;
78- let start: usize = record. start_position ( ) . into ( ) ;
81+ let start: usize = record
82+ . feature_start ( )
83+ . unwrap_or ( Position :: new ( 1 ) . unwrap ( ) )
84+ . into ( ) ;
7985 let start = start + 1 ;
80- let stop: usize = record. end_position ( ) . into ( ) ;
86+ let stop: usize = record
87+ . feature_end ( )
88+ . unwrap_or ( Ok ( Position :: new ( 1 ) . unwrap ( ) ) ) ?
89+ . into ( ) ;
8190
8291 let start = spdi:: Pos {
8392 sequence : chrom. to_string ( ) ,
0 commit comments