mirror of
https://github.com/dnlbauer/WHAM.git
synced 2026-09-10 22:25:31 +00:00
buffer state dumps and write results
This commit is contained in:
@@ -3,7 +3,7 @@ use super::histogram::Histogram;
|
|||||||
use super::Config;
|
use super::Config;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
use std::io::BufReader;
|
use std::io::{BufReader,BufWriter};
|
||||||
use k_B;
|
use k_B;
|
||||||
use std::process;
|
use std::process;
|
||||||
use std::option::Option;
|
use std::option::Option;
|
||||||
@@ -176,13 +176,14 @@ fn read_window_file(window_file: &str, cfg: &Config) -> Option<Histogram> {
|
|||||||
|
|
||||||
// TODO multidimensional output
|
// TODO multidimensional output
|
||||||
pub fn write_results(out_file: &str, ds: &Dataset, free: &Vec<f64>, prob: &Vec<f64>) -> Result<(), Box<Error>> {
|
pub fn write_results(out_file: &str, ds: &Dataset, free: &Vec<f64>, prob: &Vec<f64>) -> Result<(), Box<Error>> {
|
||||||
let mut output = File::create(out_file)?;
|
let output = File::create(out_file)?;
|
||||||
writeln!(output, "#{}\t{}\t{}", "x", "Free Energy", "Probability"); // TODO better format (coord1, coord2..)
|
let mut buf = BufWriter::new(output);
|
||||||
|
writeln!(buf, "#{}\t{}\t{}", "x", "Free Energy", "Probability"); // TODO better format (coord1, coord2..)
|
||||||
for bin in 0..free.len() {
|
for bin in 0..free.len() {
|
||||||
let coords = ds.get_coords_for_bin(bin);
|
let coords = ds.get_coords_for_bin(bin);
|
||||||
let coords_str: String = coords.iter().map(|c| {format!("{:8.6}", c)})
|
let coords_str: String = coords.iter().map(|c| {format!("{:8.6}", c)})
|
||||||
.collect::<Vec<String>>().join("\t");
|
.collect::<Vec<String>>().join("\t");
|
||||||
writeln!(output, "{}\t{:8.6}\t{:8.6}", coords_str, free[bin], prob[bin])?;
|
writeln!(buf, "{}\t{:8.6}\t{:8.6}", coords_str, free[bin], prob[bin])?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
15
src/lib.rs
15
src/lib.rs
@@ -8,6 +8,7 @@ use std::result::Result;
|
|||||||
use histogram::{Dataset,Histogram};
|
use histogram::{Dataset,Histogram};
|
||||||
use std::f64;
|
use std::f64;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
use std::io::prelude::*;
|
||||||
|
|
||||||
#[allow(non_upper_case_globals)]
|
#[allow(non_upper_case_globals)]
|
||||||
static k_B: f64 = 0.0083144621; // kJ/mol*K
|
static k_B: f64 = 0.0083144621; // kJ/mol*K
|
||||||
@@ -237,16 +238,18 @@ pub fn run(cfg: &Config) -> Result<(), Box<Error>>{
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn dump_state(ds: &Dataset, F: &Vec<f64>, F_prev: &Vec<f64>, P: &Vec<f64>, A: &Vec<f64>) {
|
fn dump_state(ds: &Dataset, F: &Vec<f64>, F_prev: &Vec<f64>, P: &Vec<f64>, A: &Vec<f64>) {
|
||||||
println!("# PMF");
|
let out = std::io::stdout();
|
||||||
println!("#x\t\tFree Energy\t\tP(x)");
|
let mut lock = out.lock();
|
||||||
|
writeln!(lock, "# PMF");
|
||||||
|
writeln!(lock, "#x\t\tFree Energy\t\tP(x)");
|
||||||
for bin in 0..ds.num_bins {
|
for bin in 0..ds.num_bins {
|
||||||
let x = ds.get_coords_for_bin(bin)[0]; // TODO
|
let x = ds.get_coords_for_bin(bin)[0]; // TODO
|
||||||
println!("{:9.5}\t{:9.5}\t{:9.5}", x, A[bin], P[bin]);
|
writeln!(lock, "{:9.5}\t{:9.5}\t{:9.5}", x, A[bin], P[bin]);
|
||||||
}
|
}
|
||||||
println!("# Bias offsets");
|
writeln!(lock, "# Bias offsets");
|
||||||
println!("#Window\t\tF\t\tdF");
|
writeln!(lock, "#Window\t\tF\t\tdF");
|
||||||
for window in 0..ds.num_windows {
|
for window in 0..ds.num_windows {
|
||||||
println!("{}\t{:9.5}\t{:8.8}", window, F[window], (F[window]-F_prev[window]).abs());
|
writeln!(lock, "{}\t{:9.5}\t{:8.8}", window, F[window], (F[window]-F_prev[window]).abs());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user