saf_v3_intersect/
saf_v3_intersect.rs

1//! Read intersecting sites in two SAF files and print readable sites.
2
3use std::{
4    env,
5    io::{self, Write},
6};
7
8use angsd_saf as saf;
9
10fn main() -> io::Result<()> {
11    let readers = env::args()
12        .skip(1)
13        .map(|p| saf::reader::Builder::v3().build_from_member_path(p))
14        .collect::<io::Result<Vec<_>>>()?;
15
16    // Note also the [`Reader::intersect`] and [`Intersect::intersect`] methods to construct
17    // intersecting reader when the number of readers are statically known.
18    let mut intersect = saf::Intersect::new(readers);
19
20    let stdout = io::stdout();
21    let mut writer = stdout.lock();
22
23    let mut bufs = intersect.create_record_bufs();
24    while intersect.read_records(&mut bufs)?.is_not_done() {
25        for (reader, buf) in intersect.get_readers().iter().zip(bufs.iter()) {
26            let contig = reader.index().records()[*buf.contig_id()].name();
27            let position = buf.position();
28            write!(writer, "{contig}\t{position}")?;
29
30            for v in buf.item().iter() {
31                write!(writer, "\t{v:.2}")?;
32            }
33
34            writeln!(writer)?;
35        }
36    }
37
38    Ok(())
39}