mirror of
https://github.com/dnlbauer/WHAM.git
synced 2026-09-10 22:25:31 +00:00
remove gsl
This commit is contained in:
28
Cargo.lock
generated
28
Cargo.lock
generated
@@ -1,16 +1,5 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
# This file is automatically @generated by Cargo.
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
[[package]]
|
|
||||||
name = "GSL"
|
|
||||||
version = "1.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7830156ea389bcbbdc8f01bf140b609b892bf7cbd0ec6ccf9957ea2be6f25ad3"
|
|
||||||
dependencies = [
|
|
||||||
"c_vec",
|
|
||||||
"libc",
|
|
||||||
"pkg-config",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "addr2line"
|
name = "addr2line"
|
||||||
version = "0.13.0"
|
version = "0.13.0"
|
||||||
@@ -78,12 +67,6 @@ version = "1.2.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
|
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "c_vec"
|
|
||||||
version = "1.0.12"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "aa9e1d9f7d49e289f36f19effbf3d5a5e30163ecf9c7a3c9be94d5374dec5b9a"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
version = "0.1.10"
|
version = "0.1.10"
|
||||||
@@ -215,9 +198,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.79"
|
version = "0.2.80"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743"
|
checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memoffset"
|
name = "memoffset"
|
||||||
@@ -254,12 +237,6 @@ version = "0.21.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "37fd5004feb2ce328a52b0b3d01dbf4ffff72583493900ed15f22d4111c51693"
|
checksum = "37fd5004feb2ce328a52b0b3d01dbf4ffff72583493900ed15f22d4111c51693"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pkg-config"
|
|
||||||
version = "0.3.19"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ppv-lite86"
|
name = "ppv-lite86"
|
||||||
version = "0.2.9"
|
version = "0.2.9"
|
||||||
@@ -387,7 +364,6 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
|
|||||||
name = "wham"
|
name = "wham"
|
||||||
version = "0.9.9"
|
version = "0.9.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"GSL",
|
|
||||||
"assert_approx_eq",
|
"assert_approx_eq",
|
||||||
"clap",
|
"clap",
|
||||||
"error-chain",
|
"error-chain",
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ keywords = ["math", "statistics", "histogram", "bioinformatics", "molecular-dyna
|
|||||||
clap = {version="2.32.0", features=['yaml']}
|
clap = {version="2.32.0", features=['yaml']}
|
||||||
error-chain = "0.12.0"
|
error-chain = "0.12.0"
|
||||||
rand = "0.7.*"
|
rand = "0.7.*"
|
||||||
GSL = "1.1"
|
|
||||||
rayon = "1.0.3"
|
rayon = "1.0.3"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use rgsl::statistics;
|
use super::statistics;
|
||||||
|
|
||||||
// calculates the statistical inefficiency g of the given timeseries
|
// calculates the statistical inefficiency g of the given timeseries
|
||||||
// the quantity g can be thought of: N/g is the number of uncorrelated
|
// the quantity g can be thought of: N/g is the number of uncorrelated
|
||||||
@@ -28,9 +28,9 @@ pub fn statistical_ineff(timeseries: &[f64]) -> f64 {
|
|||||||
// calculates the autocorrelation of a simeseries
|
// calculates the autocorrelation of a simeseries
|
||||||
fn autocorrelation(timeseries: &[f64]) -> Vec<f64> {
|
fn autocorrelation(timeseries: &[f64]) -> Vec<f64> {
|
||||||
let n = timeseries.len();
|
let n = timeseries.len();
|
||||||
let mean = statistics::mean(timeseries, 1, timeseries.len());
|
let mean = statistics::mean(timeseries);
|
||||||
let d_mean = timeseries.iter().map(|x| x-mean).collect::<Vec<f64>>();
|
let d_mean = timeseries.iter().map(|x| x-mean).collect::<Vec<f64>>();
|
||||||
let cov = statistics::covariance(timeseries, 1, timeseries, 1, n);
|
let cov = statistics::autocov(timeseries);
|
||||||
|
|
||||||
let mut autocorr = Vec::new();
|
let mut autocorr = Vec::new();
|
||||||
for t in 1..(n-1) {
|
for t in 1..(n-1) {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ use rand::prelude::*;
|
|||||||
use super::histogram::{Dataset};
|
use super::histogram::{Dataset};
|
||||||
use super::perform_wham;
|
use super::perform_wham;
|
||||||
use super::{Config,calc_free_energy};
|
use super::{Config,calc_free_energy};
|
||||||
use rgsl::statistics;
|
use super::statistics;
|
||||||
|
|
||||||
// returns a set of num_windows continious weights by
|
// returns a set of num_windows continious weights by
|
||||||
// a) generate num_windows-1 random variables and sort them
|
// a) generate num_windows-1 random variables and sort them
|
||||||
@@ -48,7 +48,7 @@ pub fn run_bootstrap(cfg: &Config, ds: Dataset, num_runs: usize) -> (Vec<f64>,Ve
|
|||||||
let mut P_se = vec![0.0; ds.num_bins];
|
let mut P_se = vec![0.0; ds.num_bins];
|
||||||
for bin in 0..ds.num_bins {
|
for bin in 0..ds.num_bins {
|
||||||
let Ps = bootstrapped_Ps.iter().map(|window| window[bin]).collect::<Vec<f64>>();
|
let Ps = bootstrapped_Ps.iter().map(|window| window[bin]).collect::<Vec<f64>>();
|
||||||
P_se[bin] = statistics::sd(&Ps, 1, num_runs)/(num_runs as f64).sqrt();
|
P_se[bin] = statistics::sd(&Ps)/(num_runs as f64).sqrt();
|
||||||
}
|
}
|
||||||
|
|
||||||
// SE of A
|
// SE of A
|
||||||
@@ -60,7 +60,7 @@ pub fn run_bootstrap(cfg: &Config, ds: Dataset, num_runs: usize) -> (Vec<f64>,Ve
|
|||||||
let mut A_se = vec![0.0; ds.num_bins];
|
let mut A_se = vec![0.0; ds.num_bins];
|
||||||
for bin in 0..ds.num_bins {
|
for bin in 0..ds.num_bins {
|
||||||
let As = bootstrapped_As.iter().map(|window| window[bin]).collect::<Vec<f64>>();
|
let As = bootstrapped_As.iter().map(|window| window[bin]).collect::<Vec<f64>>();
|
||||||
A_se[bin] = statistics::sd(&As, 1, num_runs)/(num_runs as f64).sqrt();
|
A_se[bin] = statistics::sd(&As)/(num_runs as f64).sqrt();
|
||||||
}
|
}
|
||||||
|
|
||||||
(P_se, A_se)
|
(P_se, A_se)
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate error_chain;
|
extern crate error_chain;
|
||||||
extern crate rand;
|
extern crate rand;
|
||||||
extern crate rgsl;
|
|
||||||
extern crate rayon;
|
extern crate rayon;
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
@@ -14,6 +13,7 @@ pub mod io;
|
|||||||
pub mod histogram;
|
pub mod histogram;
|
||||||
pub mod error_analysis;
|
pub mod error_analysis;
|
||||||
pub mod correlation_analysis;
|
pub mod correlation_analysis;
|
||||||
|
pub mod statistics;
|
||||||
|
|
||||||
use histogram::Dataset;
|
use histogram::Dataset;
|
||||||
use std::f64;
|
use std::f64;
|
||||||
|
|||||||
59
src/statistics.rs
Normal file
59
src/statistics.rs
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
pub fn mean(x: &[f64]) -> f64 {
|
||||||
|
x.iter().sum::<f64>() / x.len() as f64
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn autocov(x: &[f64]) -> f64 {
|
||||||
|
let x_mean = mean(x);
|
||||||
|
|
||||||
|
x.iter().map(|xi| {
|
||||||
|
(xi-x_mean).powi(2)
|
||||||
|
}).sum::<f64>() / x.len() as f64
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn sd(x: &[f64]) -> f64 {
|
||||||
|
let x_mean = mean(x);
|
||||||
|
let n = x.len() as f64;
|
||||||
|
|
||||||
|
let sum = x.iter().map(|xi| {
|
||||||
|
(xi-x_mean).powi(2)
|
||||||
|
}).sum::<f64>();
|
||||||
|
(1.0/(n-1.0) * sum).sqrt()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use assert_approx_eq::assert_approx_eq;
|
||||||
|
|
||||||
|
// a sine wave
|
||||||
|
fn dataset() -> Vec<f64> {
|
||||||
|
(0..100).map(|i| (i as f64 / 100.0 * std::f64::consts::PI).sin())
|
||||||
|
.collect::<Vec<f64>>()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn mean() {
|
||||||
|
let ds = dataset();
|
||||||
|
let expected =0.6366;
|
||||||
|
|
||||||
|
let m = super::mean(&ds);
|
||||||
|
assert_approx_eq!(m, expected, 0.0001);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn autocorr() {
|
||||||
|
let ds = dataset();
|
||||||
|
let expected = 0.094_782;
|
||||||
|
|
||||||
|
let m = super::autocov(&ds);
|
||||||
|
assert_approx_eq!(m, expected, 0.000_001);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn sd() {
|
||||||
|
let ds = dataset();
|
||||||
|
let expected = 0.309_418;
|
||||||
|
|
||||||
|
let m = super::sd(&ds);
|
||||||
|
assert_approx_eq!(m, expected, 0.000_001);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user