mirror of
https://github.com/dnlbauer/WHAM.git
synced 2026-09-11 06:35:30 +00:00
Squashed commit of the following:
commit eaebf0dcbb259decbc0d8f5bbffa62244303f6c7 Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de> Date: Sat Jul 17 14:12:30 2021 +0200 error for empty timeseries commit 1fe5383c5079ca6c0ad102d4e2cb32d5b1227e80 Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de> Date: Sat Jul 17 14:09:13 2021 +0200 refractored convdt slices calculation commit 0b1fb7fb6a72edc50b013b59623551b2ccab6913 Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de> Date: Sat Jul 17 13:27:59 2021 +0200 fix histogram building without convdt commit f9882ca4cece57451cd2971d0993a2d3621b0cdf Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de> Date: Sat Jul 17 12:53:06 2021 +0200 fix tests not compiling commit e6550e20bde3824f8199432b08777be41fc79fa8 Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de> Date: Sat Jul 17 12:43:36 2021 +0200 refractoring commit 18c77a9b6694d491ef23cebb3918ccda8fcc44a5 Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de> Date: Fri Jul 16 08:16:34 2021 +0200 run and output for multiple datasets commit 069f318f72207c416387007435eeff9867494e7a Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de> Date: Fri Jul 16 07:58:01 2021 +0200 cleanup io.rs commit 10efa428a0c6bf490c9f2d7a4c1df185de402a11 Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de> Date: Thu Jul 15 19:27:22 2021 +0200 parse multiple datasets with convdt
This commit is contained in:
54
src/lib.rs
54
src/lib.rs
@@ -47,16 +47,19 @@ pub struct Config {
|
||||
pub start: f64,
|
||||
pub end: f64,
|
||||
pub uncorr: bool,
|
||||
pub convdt: f64,
|
||||
}
|
||||
|
||||
impl fmt::Display for Config {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "Metadata={}, hist_min={:?}, hist_max={:?}, bins={:?},
|
||||
verbose={}, tolerance={}, iterations={}, temperature={},
|
||||
cyclic={:?}, uncorr={:?}, bootstrap={:?}, seed={:?}",
|
||||
cyclic={:?}, uncorr={:?}, bootstrap={:?}, seed={:?},
|
||||
uncorr={:?}, start={:?}, end={:?}, convdt={:?}",
|
||||
self.metadata_file, self.hist_min, self.hist_max, self.num_bins,
|
||||
self.verbose, self.tolerance, self.max_iterations, self.temperature,
|
||||
self.cyclic, self.uncorr, self.bootstrap, self.bootstrap_seed)
|
||||
self.cyclic, self.uncorr, self.bootstrap, self.bootstrap_seed,
|
||||
self.uncorr, self.start, self.end, self.convdt)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,27 +186,40 @@ pub fn run(cfg: &Config) -> Result<()>{
|
||||
println!("Supplied WHAM options: {}", &cfg);
|
||||
|
||||
println!("Reading input files.");
|
||||
let dataset = io::read_data(&cfg).chain_err(|| "Failed to create histogram.")?;
|
||||
println!("{}", &dataset);
|
||||
let datasets = io::read_data(&cfg).chain_err(|| "Failed to read data.")?;
|
||||
|
||||
let (P, F, F_prev) = perform_wham(&cfg, &dataset)?;
|
||||
println!("WHAM converged.");
|
||||
for (idx, dataset) in datasets.iter().enumerate() {
|
||||
if datasets.len() > 1 {
|
||||
println!("Dataset {}/{}: {}", idx+1, datasets.len(), &dataset);
|
||||
}
|
||||
else {
|
||||
println!("{}", &dataset);
|
||||
}
|
||||
let (P, F, F_prev) = perform_wham(&cfg, &dataset)?;
|
||||
println!("WHAM converged.");
|
||||
|
||||
let (P_std, free_energy_std) = if cfg.bootstrap > 0 {
|
||||
println!("Bootstrapping..");
|
||||
error_analysis::run_bootstrap(&cfg, dataset.clone(), cfg.bootstrap)
|
||||
} else {
|
||||
(vec![0.0; P.len()], vec![0.0; P.len()])
|
||||
};
|
||||
let (P_std, free_energy_std) = if cfg.bootstrap > 0 {
|
||||
println!("Bootstrapping..");
|
||||
error_analysis::run_bootstrap(&cfg, dataset.clone(), cfg.bootstrap)
|
||||
} else {
|
||||
(vec![0.0; P.len()], vec![0.0; P.len()])
|
||||
};
|
||||
|
||||
// calculate free energy and dump state
|
||||
println!("Finished. Dumping final PMF");
|
||||
let free_energy = calc_free_energy(&dataset, &P);
|
||||
dump_state(&dataset, &F, &F_prev, &P, &P_std, &free_energy, &free_energy_std);
|
||||
|
||||
io::write_results(&cfg.output, &dataset, &free_energy, &free_energy_std, &P, &P_std)
|
||||
.chain_err(|| "Could not write results to output file")?;
|
||||
// calculate free energy and dump state
|
||||
println!("Finished. Dumping PMF");
|
||||
let free_energy = calc_free_energy(&dataset, &P);
|
||||
|
||||
dump_state(&dataset, &F, &F_prev, &P, &P_std, &free_energy, &free_energy_std);
|
||||
let append = idx > 0 && datasets.len() > 1;
|
||||
let index = if datasets.len() > 1 {
|
||||
Some(idx)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
io::write_results(&cfg.output, append, &dataset, &free_energy, &free_energy_std, &P, &P_std, index)
|
||||
.chain_err(|| "Could not write results to output file")?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user