trk-io 0.6.3

TrackVis (*.trk) reader and writer
Documentation
extern crate trk_io;

use std::time::Instant;

use trk_io::{Reader, TractogramItem, Writer};

fn main() {
    {
        println!("read_all -> write_all");

        let now = Instant::now();
        let mut reader = Reader::new("/mnt/c/Users/Nil/Desktop/BigScalars.trk").expect("Read header");
        let tractogram = reader.read_all();
        let elapsed = now.elapsed();
        println!("  read_all  {}.{}", elapsed.as_secs(), elapsed.subsec_nanos() / 1000000);

        let now = Instant::now();
        let mut writer = Writer::new(
            "/mnt/c/Users/Nil/Desktop/copy.trk", Some(reader.header.clone())
        ).expect("Can't create trk file");
        writer.write_all(tractogram);
        let elapsed = now.elapsed();
        println!("  write_all {}.{}", elapsed.as_secs(), elapsed.subsec_nanos() / 1000000);
    }

    {
        println!("read_all -> iter write");

        let now = Instant::now();
        let mut reader = Reader::new("/mnt/c/Users/Nil/Desktop/BigScalars.trk").expect("Read header");
        let tractogram = reader.read_all();
        let elapsed = now.elapsed();
        println!("  read_all  {}.{}", elapsed.as_secs(), elapsed.subsec_nanos() / 1000000);

        let now = Instant::now();
        let mut writer = Writer::new(
            "/mnt/c/Users/Nil/Desktop/copy.trk", Some(reader.header.clone())
        ).expect("Can't create trk file");

        for item in tractogram.into_iter() {
            writer.write(item);
        }

        let elapsed = now.elapsed();
        println!("  write_all {}.{}", elapsed.as_secs(), elapsed.subsec_nanos() / 1000000);
    }

    {
        println!("read_all -> iter write only points");

        let now = Instant::now();
        let mut reader = Reader::new("/mnt/c/Users/Nil/Desktop/BigScalars.trk").expect("Read header");
        let tractogram = reader.read_all();
        let elapsed = now.elapsed();
        println!("  read_all  {}.{}", elapsed.as_secs(), elapsed.subsec_nanos() / 1000000);

        let now = Instant::now();
        let mut writer = Writer::new(
            "/mnt/c/Users/Nil/Desktop/copy.trk", Some(reader.header.clone())
        ).expect("Can't create trk file");

        for streamline in tractogram.streamlines.into_iter() {
            writer.write_points(streamline.to_vec());
        }

        let elapsed = now.elapsed();
        println!("  iter      {}.{}", elapsed.as_secs(), elapsed.subsec_nanos() / 1000000);
    }

    {
        print!("Iteration, write all data");
        let now = Instant::now();
        let reader = Reader::new("/mnt/c/Users/Nil/Desktop/BigScalars.trk").expect("Read header");
        let mut writer = Writer::new(
            "/mnt/c/Users/Nil/Desktop/copy2.trk", Some(reader.header.clone())
        ).expect("Can't create trk file");
        for item in reader.into_iter() {
            writer.write(item);
        }
        let elapsed = now.elapsed();
        println!("  {}.{}", elapsed.as_secs(), elapsed.subsec_nanos() / 1000000);
    }

    {
        print!("Iteration, write only points");
        let now = Instant::now();
        let reader = Reader::new("/mnt/c/Users/Nil/Desktop/BigScalars.trk").expect("Read header");
        let mut writer = Writer::new(
            "/mnt/c/Users/Nil/Desktop/copy2.trk", Some(reader.header.clone())
        ).expect("Can't create trk file");
        for (streamline, _, _) in reader.into_iter() {
            writer.write_points(streamline);
        }
        let elapsed = now.elapsed();
        println!("  {}.{}", elapsed.as_secs(), elapsed.subsec_nanos() / 1000000);
    }
}